From: "H.Yamamoto" Date: 2004-05-27T17:07:55+09:00 Subject: [ruby-dev:23639] Re: console freezed on test/drb/drbtest.rb : test_06_timeout (bcc32) 山本です。 WATANABE Hirofumi wrote: (2004/05/27 15:53) >> * 連続5回、全く書き込めなかったら、ファイルディスクリプタが無効と判断 > >それはあんまりなので、errnoを見るようにしてコミットしました。 すみません、助かりました。(errno も当てにならないと思い込んでいました) 改めて fwrite() のソースファイルを覗いて、呼び出しを辿ってみると、_write() のコメントに Return value The number of bytes written. A write to a text file does not count generated carriage returns. In case of error, each function returns -1 and sets the global variable errno to one of the following: EACCES Permission denied EBADF Bad file number と書いてあったので、EACCES もチェックしたほうがいい気がします。ただ、C++Builder6 の fwrite がこの限りでない可能性もあるので、いっそのこと Index: io.c =================================================================== RCS file: /ruby/ruby/io.c,v retrieving revision 1.277 diff -u -w -b -p -r1.277 io.c --- io.c 27 May 2004 06:17:05 -0000 1.277 +++ io.c 27 May 2004 07:50:49 -0000 @@ -411,7 +411,7 @@ rb_io_fwrite(ptr, len, f) while (errno = 0, ptr += (r = fwrite(ptr, 1, n, f)), (n -= r) > 0) { if (ferror(f) #if defined __BORLANDC__ - || errno == EBADF || errno == ENOENT + || errno #endif ) { #ifdef __hpux ではだめでしょうか?(乱暴すぎる?)