原です。 > まつもと ゆきひろです. > |(3)あるスレッドが TCPsocket.open でブロックしているときに、 > |他のスレッドが全て止まる様にみえるのですが、これは仕様ですか? > |(それとも私の勘違いかも。)これを回避する方法はありますか? > > あー,socketのthread対応が不完全であることは十分考えられます > が,TCPsocket.openってブロックしましたっけ? ブロックするのは > acceptだけだと思っていたのですけど. > > もしかしてconnect(2)がtimeoutするまでのことを言っているのか > な? だとするとこれは(仕様ではないにしても)対応は難しいですね > え.ITIMER_REALを使えば可能ですけど,今度は他の部分の効率が > 下がりすぎるし…. そうみたいです。タイムアウトを見ている時に起こっている様です。 perl の connect は connect(2) をそのまま使っているみたいで、 タイムアウトは fcntl で NONBLOCK にしてから、select で調べて 作っていました。質問です。 (1)ruby の Socket#conncect も同じでタイムアウトは見てない ですよね? fcntl はどうやったら使えますか?うまく使えたとして やはり Thread との相性は悪いですか? (2)TCPsocket.open は、タイムアウトを見ているようですが、こ れは内部での connect の部分でしょうか?タイムアウトは何秒にな っていますか?その秒数を制御できませんか? (3)socket stream からの read もタイムアウトを見たいのですが、 もちろん select を使えば、実現できると思いますが、これは Thread との相性はどうなるでしょうか?いい方法はありますか? ---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=-- Shin-ichro Hara(Nagaoka Univ.of Tech.)