From: "山崎雄介" Date: 2007-08-30T12:06:56+09:00 Subject: [ruby-list:43959] UDPSocket#recvfromが遅い 山崎(ゆ)です。 複数のUDPクライアントからデータを受信して、データと送り元のIPアドレスに よって応答を決定するようなプログラムを書いています。 IPアドレスを知りたいのでrecvfromを使っているのですが、クライアントからパ ケットが送られてからrecvfromの値が帰るまでの時間が、4秒くらいかかります。 DNSサーバが無いことが原因なのかなと思ったんですが、必要なのはIPアドレス だけなので、名前解決しない方法を探しています。 調べていくうちに過去にruby-devに以下のような提案があったことを知ったので すが、 [ruby-dev:7300] resolver を呼ばないUDPsocket#recvfrom > UDPsocket#recvfrom って、帰り値の二番目の要素として [host, port] を返し > ますよね。ここで host は getnameinfo を使って、アドレスから逆引きしてホ > スト名になって帰ってきます。この、「アドレスから逆引き」をしない > recvfrom が欲しいという要望です。 そのあとUDPSocket#recvfrom_noresolvなるものが提案されていましたが取り込 まれてはいないようなので、なにかいい方法はないでしょうか? 以下ソースです。 def listen(sock) Thread.start{ loop do data, inet_addr = sock.recvfrom(100) size = data.split(//).size if data.length > 0 p inet_addr[2] + data end end } end udp = UDPSocket.new udp.bind('', 1000) listen(udp) _______________________ Yusuke Yamasaki