Advertisement · 728 × 90

Posts by

たぶんそれはconnectが終わった上で、スレッドが終了し、GCが走ってcloseされてませんかね。接続を無視するホストに対してconnectしてみればconnectに時間がかかるので、Thread#killしてもなかなか死なないのが観測できますし、GC.disableすればfdが開きっぱなしなんじゃないかな…どちらも試してないのでたぶんですが…

2 years ago 1 0 1 0

connect(2)の最中にRuby threadを中断する方法がないと仰っているんだと思います。
実際には、例えばLinuxならthread単位でsignalを送ることでEINTRで中断させることは出来ます。もっともRubyにはthread単位にsignalを扱う機能はないので別の方法を考える必要があます。
他にはconnect_nonblockがあり、connect_nonblockで開きまくってからIO.selectで繋がったやつをゲットできるんじゃないかと思います

2 years ago 1 0 1 0

端的にはRubyのリポジトリを git grep WaitWritable して頂くといいと思うんですが、EGAINやEWOULDBLOCKつまり実行中にシグナルで割り込みがかかったとかですかね。あとはOpenSSLでラップされてるパターンがあります

2 years ago 1 0 1 0

EINPROGRESS以外にも例外返ってきませんっけ

2 years ago 0 0 1 0

ハングというか受信待ちだったりしませんか

2 years ago 1 0 1 0