Project

General

Profile

ActionsLike0

Bug #8605

closed

Bug #8574: CI Build failure introduced by r41686

TestSocket_TCPSocket#test_initialize_failure fails on Windows

Added by usa (Usaku NAKAMURA) over 11 years ago. Updated over 11 years ago.

Status:
Rejected
Target version:
ruby -v:
ruby 2.1.0dev (2013-07-05 trunk 41797) [x64-mswin64_100]
[ruby-dev:47484]

Description

=begin
表題の通りですが、こんな風に失敗しています。

  1. Failure:
    TestSocket_TCPSocket#test_initialize_failure [D:/tmp/mswin-build20130705-8260-1av0ek2/ruby/test/socket/test_tcp.rb:24]:
    Expected /for\ "127.0.0.1"\ port\ 11459/ to match "Only one usage of each socket address (protocol/network address/port) is normally permitted. - connect(2) for "127.0.0.1" port 11458".

テストを眺めると、クライアントポート側で失敗するはずだ、と明記されているわけですが、なぜかご覧の通りでサーバポート側でエラーメッセージが出力されております。
これはrubyでどうにかすべき問題でしょうか? それとも単にプラットフォーム依存として片付けるべき?
=end

Updated by akr (Akira Tanaka) over 11 years ago

  • Parent task set to #8574

Bug #8574 にもあって、なにが起きてるのかなぁ、と思っていたのですが、
調べてみると、_WIN32 と CYGWIN では SO_REUSEADDR を使っていないようです。

ext/socket/ipsocket.c:

9627 usa #if !defined(_WIN32) && !defined(CYGWIN)
9627 usa status = 1;
9627 usa setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
27529 nobu (char*)&status, (socklen_t)sizeof(status));
9627 usa #endif

r9627 からは [ruby-core:6765] をたどれて、Win32 では SO_REUSEADDR が
うまく動かないとのことですが、これはいまでもそうなんでしょうか。

Updated by usa (Usaku NAKAMURA) over 11 years ago

  • Status changed from Assigned to Rejected

あー、そうかー、言われてみたらそんな話あったわー、という感じです。
わざわざ調べていただきありがとうございます。
(ちなみにさらに遡ったら r1800 からのようですね。)

事情は [ruby-core:6765] で説明されている通りですが、これは現在も
変わってないので、おとなしく諦めますかね。
テストの方は #8574 への対応ということで成瀬さんが既に変更済みですし。

Updated by akr (Akira Tanaka) over 11 years ago

2013年7月8日 11:21 usa (Usaku NAKAMURA) :

あー、そうかー、言われてみたらそんな話あったわー、という感じです。
わざわざ調べていただきありがとうございます。
(ちなみにさらに遡ったら r1800 からのようですね。)

事情は [ruby-core:6765] で説明されている通りですが、これは現在も
変わってないので、おとなしく諦めますかね。
テストの方は #8574 への対応ということで成瀬さんが既に変更済みですし。

エラーメッセージのテストなので、
bind が失敗するならなんでもいいとは思うのですが。

EADDRINUSE 以外だと、
Unix なら port 1023 以下で EACCES とかもありますが、
それはおそらく Windows だと動いちゃいますよねぇ。

127.0.0.1 と ::1 との組み合わせで EAFNOSUPPORT というのは
現在なら大抵の環境で動く気もしますが、どうなんだろうなぁ。

あぁ、自分の IP アドレスではない IP アドレスを指定して
EADDRNOTAVAIL という手もあるか。
そういうアドレスをどうやって選ぶか、という話はありますが。

Tanaka Akira

ActionsLike0

Also available in: Atom PDF