[#9581] SIGFPE isn't raised on FreeBSD 4.0 — gotoken@... (GOTO Kentaro)

ごとけんです

18 messages 2000/04/18
[#9582] Re: SIGFPE isn't raised on FreeBSD 4.0 — ARIMA Yasuhiro <fit0298@...> 2000/04/18

有馬です。

[#9583] Re: SIGFPE isn't raised on FreeBSD 4.0 — EGUCHI Osamu <eguchi@...> 2000/04/18

えぐち@エスアンドイー です。

[ruby-dev:9566] [PATCH] closesocket() vs. close()

From: Katsuyuki Komatsu <komatsu@...>
Date: 2000-04-12 13:17:58 UTC
List: ruby-dev #9566
小松です。

BeOS 5でも、ファイル/ソケットディスクリプタの統合はなかった
みたいですね。

ということで、長い間ローカルパッチで対応していましたが、
BeOSとmswin32でソケットをクローズするのにclose()を使っている
ところをclosesocket()を使うようにするパッチです。

あと、mswin32でファイルハンドルのクローズにfree()を使っている
ところをmyfdclose()に変更しました。

Wed Apr 12 22:09:41 2000  Katsuyuki Komatsu  <komatsu@sarion.co.jp>

	* ext/socket/extconf.rb: add have_func("closesocket")
	  on BeOS and mswin32.

	* ext/socket/getaddrinfo.c: add HAVE_CLOSESOCKET check.

	* ext/socket/socket.c: add HAVE_CLOSESOCKET check.  Don't use free()
	  to close a file handle on mswin32.

diff -ru2p ruby-1.4.4.dist/ext/socket/extconf.rb ruby-1.4.4/ext/socket/extconf.rb
--- ruby-1.4.4.dist/ext/socket/extconf.rb	Thu Mar  2 12:51:48 2000
+++ ruby-1.4.4/ext/socket/extconf.rb	Wed Apr 12 22:09:41 2000
@@ -7,4 +7,5 @@ when /mswin32/
   test_func = "WSACleanup"
   have_library("wsock32", "WSACleanup")
+  have_func("closesocket")
 when /cygwin/
 #  $LDFLAGS << " -L/usr/lib" if File.directory?("/usr/lib")
@@ -15,4 +16,5 @@ when /beos/
   test_func = "socket"
   have_library("net", "socket")
+  have_func("closesocket")
 when /i386-os2_emx/
   test_func = "socket"
diff -ru2p ruby-1.4.4.dist/ext/socket/getaddrinfo.c ruby-1.4.4/ext/socket/getaddrinfo.c
--- ruby-1.4.4.dist/ext/socket/getaddrinfo.c	Thu Mar 23 13:14:26 2000
+++ ruby-1.4.4/ext/socket/getaddrinfo.c	Wed Apr 12 22:09:41 2000
@@ -422,5 +422,9 @@ getaddrinfo(hostname, servname, hints, r
 			if (s < 0)
 				continue;
+#if defined(HAVE_CLOSESOCKET)
+			closesocket(s);
+#else
 			close(s);
+#endif
 
 			if (pai->ai_flags & AI_PASSIVE) {
diff -ru2p ruby-1.4.4.dist/ext/socket/socket.c ruby-1.4.4/ext/socket/socket.c
--- ruby-1.4.4.dist/ext/socket/socket.c	Wed Mar  8 15:25:19 2000
+++ ruby-1.4.4/ext/socket/socket.c	Wed Apr 12 22:09:41 2000
@@ -186,5 +186,5 @@ bsock_close_read(sock)
     fptr->mode &= ~FMODE_READABLE;
 #ifdef NT
-    free(fptr->f);
+    myfdclose(fptr->f);
 #else
     fclose(fptr->f);
@@ -210,5 +210,5 @@ bsock_close_write(sock)
     fptr->mode &= ~FMODE_WRITABLE;
 #ifdef NT
-    free(fptr->f2);
+    myfdclose(fptr->f2);
 #else
     fclose(fptr->f2);
@@ -763,5 +763,9 @@ open_inet(class, h, serv, type)
 
 	if (status < 0) {
+#if defined(HAVE_CLOSESOCKET)
+	    closesocket(fd);
+#else
 	    close(fd);
+#endif
 	    fd = -1;
 	    continue;
@@ -771,5 +775,9 @@ open_inet(class, h, serv, type)
     if (status < 0) {
 	if (fd >= 0)
+#if defined(HAVE_CLOSESOCKET)
+	    closesocket(fd);
+#else
 	    close(fd);
+#endif
 	freeaddrinfo(res0);
 	rb_sys_fail(syscall);
@@ -1034,5 +1042,9 @@ open_unix(class, path, server)
 
     if (status < 0) {
+#if defined(HAVE_CLOSESOCKET)
+	closesocket(fd);
+#else
 	close(fd);
+#endif
 	rb_sys_fail(sockaddr.sun_path);
     }

--
小松克行 / Katsuyuki Komatsu <komatsu@sarion.co.jp>

In This Thread

Prev Next