Actions
Bug #2632
closedWindows での未読のあるソケットのクローズ後の読み取り
ruby -v:
ruby 1.9.2dev (2010-01-23 trunk 26382) [i386-mingw32]
Backport:
Description
=begin
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 で動作が異なっている場合は教えていただけるとありがたいです。
=end
Files
Actions
Like0
Like0Like0Like0Like0Like0