Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2010年10月24日(日)

標準添付ライブラリ Socket (その 2)

| 16:08 |  標準添付ライブラリ Socket (その 2) - Going My Ruby Way を含むブックマーク はてなブックマーク -  標準添付ライブラリ Socket (その 2) - Going My Ruby Way  標準添付ライブラリ Socket (その 2) - Going My Ruby Way のブックマークコメント

標準添付ライブラリ Socket の復習。

Linux の ruby1.8 で実施です。

TCPServerTCPSocket を使ってみます。

Term #1 で irb -r socket。ポート 12345 を開いて listen する。

>> s = TCPServer.open "<any>", 12345
=> #<TCPServer:0xb77777f4>
>> conn = s.accept
(この状態で wait ...)

Term #2 で irb -r socket。ポート 12345 にコネクション接続する。

>> conn = TCPSocket.open "localhost", 12345
=> #<TCPSocket:0xb77c8078>

Term #1。コネクション接続された。(s.accept が返ってきた)

=> #<TCPSocket:0xb77761c4>

Term #2 の irb。メッセージ送信。

>> conn.puts "hello"
=> nil

Term #1 の irb。メッセージ受信と返信。コネクションクローズ。

>> puts conn.gets
hello
=> nil
>> conn.puts "bye"
=> nil
>> conn.close
=> nil

Term #2 の irb。メッセージ受信とコネクションクローズ。

>> p conn.gets
"bye\n"
=> nil
>> conn.close
=> nil
>> 

Term #1 の irb。ソケット切断。

>> s.close
=> nil
>> 

以上。

追記。

ruby1.9 (irb1.9) で IPv6 形式で TCPSocket.open を呼ぶと IPv6 で LISTEN する。

>> s = TCPServer.open "::1", 12345
=> #<TCPServer:0x9975528>

netstat -tap

稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス    外部アドレス  状態     PID/Program name
  :
tcp6       0      0 localhost:12345 [::]:*        LISTEN   4262/irb1.9