小松です。

In the message of [ruby-list:19875] Re: [mswin32] TCPSocket::new() raises Errno::ENOENT
    on 1999/12/24 18:35:31 Katsuyuki Komatsu <komatsu / sarion.co.jp> wrote:
||fclose を置き換えてしまうと、File I/O 全般に影響が出そうな
||気がします。
|
|そうなんですよね。
|ですので、struct OpenFileを変更する方で週末に作り直そうと思っています。
|# しかし、fclose()でCloseHandle()させないような手段があるのか?

最終的に、struct OpenFileはさわらずに、以下のext/socket/socket.cと
win32/win32.cの変更で十分でした。

Mon Dec 27 12:35:47 1999 Katsuyuki Komatsu <komatsu / sarion.co.jp> * ext/socket/socket.c (sock_finalize): mswin32: fix socket handle leak. * win32/win32.c (myfdclose): ditto. Tue Dec 21 17:21:28 1999 Koji Oda <oda / bsd1.qnes.nec.co.jp> * ext/socket/socket.c (sock_finalize): mswin32: fix FILE* leak. --- ext/socket/socket.c.dist Wed Dec 8 01:47:18 1999 +++ ext/socket/socket.c Mon Dec 27 12:34:52 1999 @@ -94,14 +94,10 @@ sock_finalize(fptr) { SOCKET s; - extern int errno; if (!fptr->f) return; - - myfdclose(fptr->f); - if(fptr->f2) myfdclose(fptr->f); -/* - s = get_osfhandle(fileno(fptr->f)); + s = get_osfhandle(fileno(fptr->f)); + myfdclose(fptr->f); + if (fptr->f2) myfdclose(fptr->f2); closesocket(s); -*/ } #endif --- win32/win32.c.dist Tue Nov 9 12:57:28 1999 +++ win32/win32.c Mon Dec 27 12:35:47 1999 @@ -1661,5 +1661,6 @@ void myfdclose(FILE *fp) { - fclose(fp); + _free_osfhnd(fileno(fp)); + fclose(fp); } -- 小松克行 / Katsuyuki Komatsu <komatsu / sarion.co.jp>