From: matz@... (Yukihiro Matsumoto) Date: 1997-01-10T16:26:25+09:00 Subject: [ruby-list:1671] Re: [Q] Timeout in Socket (Re: [Q] Use of Thread and Mutex) まつもと ゆきひろです. In message "[ruby-list:1670] [Q] Timeout in Socket (Re: [Q] Use of Thread and Mutex)" on 97/01/10, sinara@blade.nagaokaut.ac.jp writes: | |原です。 |perl の connect は connect(2) をそのまま使っているみたいで、 |タイムアウトは fcntl で NONBLOCK にしてから、select で調べて |作っていました。質問です。 | |(1)ruby の Socket#conncect も同じでタイムアウトは見てない |ですよね? fcntl はどうやったら使えますか?うまく使えたとして |やはり Thread との相性は悪いですか? タイムアウトは見ていません.fcntlはIO#fcntlを使えばできると 思います.ただし,わたしはNONBLOCKなんてつかったことないんで, 本当にできるかどうか自信が無いです.そもそもconnectのタイム アウトをselectで検出できるのだろうか? # h2rbなんてのがないのも問題ではあるな. |(2)TCPsocket.open は、タイムアウトを見ているようですが、こ |れは内部での connect の部分でしょうか?タイムアウトは何秒にな |っていますか?その秒数を制御できませんか? 内部のconnectシステムコールのさらに中です.タイムアウトして いるのはカーネルなんですね.秒数の制御はsockoptでできるかも 知れません(良く知らないんですけど). |(3)socket stream からの read もタイムアウトを見たいのですが、 |もちろん select を使えば、実現できると思いますが、これは Thread |との相性はどうなるでしょうか?いい方法はありますか? threadを使えばタイムアウト見なくても良いんじゃないかと思うの ですけど(そのsocketを監視するthreadを用意してブロックしてし まえば良い),timeoutが見たいならselectを使うしか無いでしょう ね.selectはいちおうthread safeに作ってありますので,相性が 悪いと言うことは無いと思います.未発見のバグがあっても. まつもと ゆきひろ /:|)