[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



In This Thread