[ruby-list:50365] Re: [質問] Ruby socket.send でUDP Packet が出ない? ネットワーク環境によるものか?
From:
<yamataka@...08.itscom.net>
Date:
2016-08-01 09:05:29 UTC
List:
ruby-list #50365
> こんにちは、市田です。
>
> アドバイスというほどのものではないですが、ご参考まで。
市田さん
山口です。
アドバイスありがとうございます。
件名の 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