「動かない」じゃあんまりなので具体的に言い直します。 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 に特有なのかは確認できません。
666でbindできるということはroot!?
というのはさておき、NetBSD/i386でも同じでした。ふむー。
あ、(あおきさんの例だと) TCPServer.new("alpha", 666) だとうまくいくんじゃないですかね。インターフェースを限定しないといけないみたい。
すんません、6666 の間違いです。
「その数は 666 である」……とか言ってみる
なるほど。
ruby -rsocket -e 'TCPServer.new("alpha", 6666).accept.close'
としたらつながりました。
これは仕様と考えるべきなのかなあ。