[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>