Ruby で STDIN と TCP ソケットで select を使用しようとしていますが、何らかの理由で、select から返される値が選択肢の 1 つと一致しないようです。返されているのはソケットのように見えますが、== (または等号?) を使用して一致しません。select から返された結果が、渡したオブジェクトと一致しない理由と、ここで何をすべきか教えてもらえますか?
server = TCPSocket::new("irc.freenode.net", 7000)
server.puts "NICK MyBot"
server.puts "USER #{ENV['USER']} 0 * :My Bot"
# <snip definitions>
while (!$done)
results = select([server, STDIN], nil, nil)
if results[0] == STDIN
puts "Reading from STDIN"
execute_command
elsif results[0] == server
puts "Reading from server"
receive_data
else
puts "Something's wrong... results[0]: #{results[0]}, server: #{server}"
puts "IDs: results[0]: #{results[0].__id__}, server: #{server.__id__}"
exit 1
end
end
これを実行すると、次のようになります。
何かがおかしい... 結果[0]: #<TCPSocket:0x33c390>、サーバー: #<TCPSocket:0x33c390> ID: 結果[0]: 1695840、サーバー: 1695990
Mac OS X で Ruby バージョン 1.8.6 を実行しています。
$ ruby --バージョン ruby 1.8.6 (2008-03-03 パッチレベル 114) [universal-darwin9.0] $どのルビ /usr/bin/ルビー