まつもと ゆきひろです.

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 <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に作ってありますので,相性が
悪いと言うことは無いと思います.未発見のバグがあっても.

                                まつもと ゆきひろ /:|)