From: yamataka@...08.itscom.net Date: 2016-08-01T18:05:29+09:00 Subject: [ruby-list:50365] Re: [質問] Ruby socket.send でUDP Packet が出ない? ネットワーク環境によるものか? > こんにちは、市田です。 > > アドバイスというほどのものではないですが、ご参考まで。 市田さん 山口です。 アドバイスありがとうございます。 件名の UDP Packet が出ないは、早合点しておりました。 Wiresharkにて、再確認しておりましたら、UDP Packet及びその応答Packetも出 てました。 > オプションは何も付けずに実行しましたが、ソースを見ると -t, -r でタイム ア > ウト時間と繰り返し数が指定できるようです。 > これらのオプションを指定して動作を見てはいかがでしょうか。 -t 10 10sのタイムアウト指定したが状況変わらず。 -r 3 M-SEARCHパケットを3回送出 を指定したが状況変わらず > > raw_messages.push(socket.recv(4196)) > 何となくrecvで止まっているように思えますが、 > recv と push を分ける、またloopの前に表示を入れるなど、どこで止まって い > るのかを確認すると、問題の箇所が絞り込め、次の調査対象がはっきりするか も > しれません。 アドバイスいただいて、デバッグプリント用として、putsを追加。 reecvとpush を分割。 recvのbyte 4196 から 100000 にしてみましたが、 ご指摘のように recv でブロックしているようです。 Wireshark での応答Packetが3s後程度になるので、 -t 10 で、timeout 10s にも設定してみたりしましたが、 状況変わらずです。 何か他に調査する手立てがあれば、ご教示いただけるとありがたいです。 # Wait for responses. Timeout after a specified number of seconds begin puts "#{__FILE__},#{__LINE__}" Timeout::timeout(option :timeout) do loop do recv = socket.recv(100000) puts "recv:#{recv}" raw_messages.push(recv) puts "raw_messages.push executed}" =begin raw_messages.push(socket.recv(4196)) =end end end puts "#{__FILE__},#{__LINE__}" rescue Timeout::Error # This is expected