タグ

通信とRubyに関するlarkerのブックマーク (2)

  • Ruby でソケット通信 - ~fumi/ChangeLog

    仕事で(その仕事が自分にまわってくることはないだろうけど). ソケット通信のプログラムが必要になるらしいので, ちょっと Ruby で書いてみた. クライアント #!/usr/bin/ruby require 'socket' s = TCPSocket.open("localhost", 12345) s.puts("test") s.close localhost の port 12345 で待ち受けているサーバに, "test" という文字列を送る. サーバ #!/usr/bin/ruby require 'socket' require 'thread' gs = TCPServer.open(12345) addr = gs.addr addr.shift printf("server is on %s\n", addr.join(":")) while true Thread.

  • IO::selectを使う:Geekなぺーじ

    普通の状態では、recvなどはデータが受信できるまでブロッキングします。 ソケットを一つしか利用していない場合にはブロッキングは非常に便利なのですが、ソケットが複数になると困ってしまいます。 シングルスレッドで複数のソケットを扱うとき、片方のソケットでブロッキングしたままになってしまうと他のソケットにデータが到着しても受信が出来なくなってしまうからです。 そのため、複数のソケットを扱っていると、どのソケットからデータが受信可能か知りたくなります。 ブロッキングとは、関数が返ってこない事を表します。 例えば、recvはデータを受信して関数が戻ってきます。 言い方を変えると、データを受信するまでブロックしています。 recvをブロッキングしないノンブロッキング方式で使う事も可能ですが、ここではブロッキング方式のまま使う方法を説明します。 そのような機能を提供するのがIO::selectです。

  • 1