けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :7274 ] the message: "[ruby-list:7274] Re:
Socket#shutdown ", on Mar/30 15:50(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>UNIXドメインでshutdown(2)って使いますか? 私は使わないし,他
>の人もあんまり使わないからこんなバグが残ってるんだと思うんで
>すけど.だって必要ないじゃん.

私も今までは使ったことないんですが...

双方向パイプを1つのfd(socket)で実現しているので, 送り用や受けて用だけ
をcloseするってできないんで, そういう時にshutdownする必要があるんです.

shell.rbのShell::System#initialize/each()辺りで使っています.

#今はpipeですけど.

以下のような感じです:

sh.cat("/etc/passwd").system("sort").to_a

ruby側                    sort側
sh.cat("/etc/passwd") --> 
to_a                 <--

まず, -->のruby側をshutdown(1)しないとsortがeofにならないのでいつまで
も待つことになり, そうすると, 受けて(to_a)もいつまでも待つことになると...

# もしかしたら, Shellのパイプの実現に問題があるのかも知れませんが...

 __
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju / rational.com <<---