From: _ wanabe Date: 2010-01-23T03:22:42+09:00 Subject: [ruby-dev:40135] [Bug #2632] Windows での未読のあるソケットのクローズ後の読み取り Bug #2632: Windows での未読のあるソケットのクローズ後の読み取り http://redmine.ruby-lang.org/issues/show/2632 起票者: _ wanabe ステータス: Open, 優先度: Low 担当者: Usaku NAKAMURA, カテゴリ: core ruby -v: ruby 1.9.2dev (2010-01-23 trunk 26382) [i386-mingw32] Windows XP SP3 で、添付の test.rb を実行すると、Errno::ECONNRESET 例外が発生します。 $ ruby test.rb test.rb:11:in `gets': 既存の接続はリモート ホストに強制的に切断されました。 (Errno::ECONNRESET) from test.rb:11:in `
' C で同様のプログラムを書いた場合も同じ減少が確認できたので、Winsock2 の仕様と思われます。 しかし不便なのでできれば ruby 側で回避できる部分はしてしまうのはどうでしょうか。 具体的に困る例として drb で argc_limit を超えた長さの引数を渡したとき DRbMessage#recv_request 中で引数を読まずに通信を終了するので これにより DRbConnError を起こしてしまう、というものがあります。 TestDRbCore#test_03 などで確認できます。 ソケットを shutdown / close するときに読み込めるデータがあればすべて破棄するようにした パッチを書いてみたので添付します。 また、vista や 7 で動作が異なっている場合は教えていただけるとありがたいです。 ---------------------------------------- http://redmine.ruby-lang.org