history

青木日記 RSS

<前の日 | この月 | 次の日>

2003-08-15

Ruby TCPServer on NetBSD/Alpha (2)

「動かない」じゃあんまりなので具体的に言い直します。 NetBSD/Alpha 側で TCPServer で待ち、 そこに別のホストから TCPSocket でつなぐと クライアント側が常に ECONNREFUSED になります。 例えば次のようになります。

alpha $ ruby -rsocket -e 'TCPServer.new(6666).accept.close'
 
linux $ ruby -rsocket -e 'TCPSocket.open("alpha", 6666).close'
-e:1:in `initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)
        from -e:1:in `open'
        from -e:1

このとき Alpha 側では何も変化がありません。 ずっと待ち続けています。

確認したこと: C で書いた TCP/IPv4 サーバを同じポート (6666) に待たせて、 クライアントでは同じことを実行。こちらは何事もなく動いた。

確認したこと 2: ruby -rsocket -e 'TCPServer.new(6666).accept.close' を Linux/Alpha で実行し、クライアントで同じことを実行。こちらも何事もなく動いた。

つまり今のところは NetBSD/Alpha で Ruby の TCPServer を使ったときに特有の現象です。 他のプラットフォームの NetBSD が存在しないので、 NetBSD に特有なのか NetBSD/Alpha に特有なのかは確認できません。

本日のツッコミ(全4件) [ツッコミを入れる]
(う) (2003-08-15 23:51)

666でbindできるということはroot!?
というのはさておき、NetBSD/i386でも同じでした。ふむー。

(う) (2003-08-15 23:57)

あ、(あおきさんの例だと) TCPServer.new("alpha", 666) だとうまくいくんじゃないですかね。インターフェースを限定しないといけないみたい。

あおき (2003-08-15 23:58)

すんません、6666 の間違いです。
「その数は 666 である」……とか言ってみる

あおき (2003-08-16 00:10)

なるほど。
ruby -rsocket -e 'TCPServer.new("alpha", 6666).accept.close'
としたらつながりました。
これは仕様と考えるべきなのかなあ。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS