Project

General

Profile

Actions

Bug #2632

closed

Windows での未読のあるソケットのクローズ後の読み取り

Added by wanabe (_ wanabe) about 14 years ago. Updated almost 13 years ago.

Status:
Rejected
Target version:
-
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

test.rb (161 Bytes) test.rb wanabe (_ wanabe), 01/23/2010 03:23 AM
winsock2.patch (1.02 KB) winsock2.patch wanabe (_ wanabe), 01/23/2010 03:23 AM

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #3515: FreeBSD wrongly raises ECONNRESET on close(2)Closednaruse (Yui NARUSE)07/02/2010Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0