とみたです。

多分既出じゃないと思うので報告します。

ruby 1.6.7 で、ソケットやパイプに対する EPIPE の検出に失敗することがあ
ります。

ある端末から、

	% mknod /tmp/hoge p
	% ruby -e 'File::open("/tmp/hoge", "w"){|f|loop{f.write("x"*40)}}'

別の端末から、

	% cat /tmp/hoge
	すぐに ^C

でも ruby が終了しないことがあります。

たぶん、これで直ると思います。

--- ruby-1.6.7/io.c.orig	Wed Feb 27 13:47:51 2002
+++ ruby-1.6.7/io.c	Thu Apr 11 20:01:44 2002
@@ -252,11 +252,11 @@
 		break;
 	n = ptr - RSTRING(str)->ptr;
     }
-    if (n == 0 && ferror(f))
+    if (n != RSTRING(str)->len && ferror(f))
 	rb_sys_fail(fptr->path);
 #else
     n = fwrite(RSTRING(str)->ptr, 1, RSTRING(str)->len, f);
-    if (n == 0 && ferror(f)) {
+    if (n != RSTRING(str)->len && ferror(f)) {
 	rb_sys_fail(fptr->path);
     }
 #endif

-- 
とみたまさひろ <tommy / tmtm.org>, <tommy / mysql.gr.jp>
日本MySQLユーザ会 http://www.mysql.gr.jp