Project

General

Profile

Bug #2632

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

Added by wanabe (_ wanabe) over 9 years ago. Updated about 8 years ago.

Status:
Rejected
Priority:
Normal
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

Related to Ruby trunk - Bug #3515: FreeBSD wrongly raises ECONNRESET on close(2)Closed07/02/2010Actions

History

#1

Updated by wanabe (_ wanabe) over 9 years ago

=begin

=end

#2

Updated by usa (Usaku NAKAMURA) over 9 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:40135] [Bug #2632] Windows での未読のあるソケットのクローズ後の読み取り"
on Jan.23,2010 03:22:42, redmine@ruby-lang.org wrote:

また、vista や 7 で動作が異なっている場合は教えていただけるとありがたいです。

Windows7で試したところ、test.rbは例外なく(おそらくは)期待通り
に終了します。

それでは。
--
U.Nakamura usa@garbagecollect.jp

=end

#3

Updated by usa (Usaku NAKAMURA) over 9 years ago

  • Status changed from Open to Assigned

=begin

=end

#4

Updated by usa (Usaku NAKAMURA) about 9 years ago

  • Assignee changed from usa (Usaku NAKAMURA) to wanabe (_ wanabe)

=begin
このパッチについては特に反対しないので、望むなら入れてもらってかまいません。
=end

#5

Updated by wanabe (_ wanabe) about 9 years ago

  • Status changed from Assigned to Rejected

=begin
改めて考えますと、最新の Windows7 で問題ないのであれば
わざわざ動的コストをかけて対策するまでもないかもしれません。
どうしても必要であれば、スクリプト側でソケットを閉じる前に処理すればいいだけですし。

この問題が実用的に障害となるようなケースが見つかれば別ですが
とりあえず Reject させていただきます。失礼しました。
=end

Also available in: Atom PDF