まつもと ゆきひろです

In message "[ruby-dev:6730] Re: cvs repository"
    on 99/05/07, itojun / iijlab.net <itojun / iijlab.net> writes:

|>	コードのc.getpeername()が成功しません(ENOTCONNが返る)。
|>	デバッガで追ってると成功するので、「EAGAINだったらもう一度」の
|>	あたりでなにかいけないことが起きているように思います。
|
|	5/7版でも同様です。
|	- thread_connect()の中でrb_thread_fd_writable()を呼んでいますが、
|	  一本しかthreadがないときはEISCONNになるまで返って来ないようにする
|	- EALREADYなどのとき、thread_connect()から返らない。EISCONNに
|	  なるまでは返ってはいけない。
|	- EISCONNじゃないとやばい操作(例: getpeername)全ての前でEISCONNに
|	なるまで待つ操作をいれる。
|	のいずれかが必要な気がしますが、どうしたらいいのか...

うーむ,「いずれか」で良いんですか?
とりあえず case EALREADY: (553行目)を削ると

|	- EALREADYなどのとき、thread_connect()から返らない。EISCONNに
|	  なるまでは返ってはいけない。

は実現できるような気がするんですが,実際ナニが起きているのか
良く分からないんで,全然自信が無いです.これじゃ絶対足りなそ
うな気配が...

もしかするとconnectが成功する(0を返す)だけじゃ不十分だという
ことなんでしょうか?
                                まつもと ゆきひろ /:|)