From: WATANABE Tetsuya Date: 1998-04-17T09:44:37+09:00 Subject: [ruby-list:7600] manual sample (socket) man-1.1b8 の socket のサンプルなのですが。 read メソッドを使っている場合、データが渡りません。sync すれ ばいいのかな? と思ったのですが、そうでもないようです。read の 代わりに gets すると動作します。 サンプルとして、TCPsocket と TCPserver(スレッドではない方) の 二つになります。 確認は Linux kernel 2.0.33 と HP-UX 10.20 で行ったのですが、 すぐ使えるように read ではなく gets を使って書いてあった方が いいのではないでしょうか? ということで、次のような感じにしてはいかがでしょうか? TCPserver ------------------------------ require "socket" gs = TCPserver.open(0) socks = [gs] addr = gs.addr addr.shift printf("server is on %d\n", addr.join(":")) while TRUE nsock = select(socks) next if nsock == nil for s in nsock[0] if s == gs socks.push(s.accept) print(s, " is accepted\n") else if s.eof? print(s, " is gone\n") s.close socks.delete(s) else str = s.gets s.write(str) end end end end ------------------------------ TCPclient ------------------------------ require "socket" port = if ARGV.size > 0 then ARGV.shift else 4444 end print port, "\n" s = TCPsocket.open("localhost", port) while gets s.write($_) print(s.gets) end s.close exit ------------------------------ ほんとは read 使っても動くんでしょうか? sync は書き込み時なの で readline か gets を使うと思われるのですが。いかがでしょう? -- WATANABE Tetsuya HP Japan PSO e-mail tetsu@jpn.hp.com