[ruby-list:50373] Re: [質問] Ruby socket.send でUDP Packet が出ない? ネットワーク環境によるものか?
From:
Toshihiko Ichida <dogatana@...>
Date:
2016-08-05 12:31:02 UTC
List:
ruby-list #50373
市田です。 On 2016/08/05 13:11, yamataka@u08.itscom.net wrote: > 結論から、今までご相談させていただいた諸々の症状が > Windows版Rubyを使用すると、正常に動作しました。 それは何よりです。良かったですね。 > 結果以降に記載しておりますが、Laptop+Wi-Fi AP 2台のみの環境時には、recv > で受けていないのは、よく理解できていないですが... > ネットワーク内に、Wi-Fi APだけの場合、Wi-Fi APからSSDP Notify Packetが出 > てくるのが、 > 1分後や長い時では、2分30秒後に出てくるとか... (挙動よく分からず...)にな > り、 > プログラムは、ブロックしたまま。 Wiresharkで見るとわかりますが、WindowsでSSDPサービスが有効の場合、その サービスがM-SERCHを発行しています。 恐らくですが、そのNotifyはrubyスクリプトではなく、Windowsのサービスによ るものではないですか? Wiresharkでポート番号を見ればわかるはずです。 > ■Laptop + Wi-Fi AP + DLNA対応Audioセット1台 (3台環境) > Laptop: Wi-Fi AP 有線接続 > DLNA対応Audioセット: Wi-Fi AP 有線接続 (ハブ介して) > プログラム: 市田さんご提供コード > [Cygwin版] > 58886 > recv 467 bytes > [Windows版] > 57543 > recv 467 bytes > > ■Laptop + Wi-Fi AP + DLNA対応Audioセット1台 > ↑と同じ環境で > プログラム: easy_upnp付属 upnp-list (市田さんによるコード改善適用) > [Cygwin版] > Starting SSDP search... > ブロック (Timeoutせず) > [Windows版] > Starting SSDP searc... > Found 3 devices > > Windows版では正常に動作する事が確認できました。 Cygwin版とWindows版とで動きが違うのは確かですが、スケルトンプログラムで 受信できているので、問題はssdb_searcher.rbにあるのではないですか? > socket.do_not_reverse_lookup = true > socket.setsockopt(:IPPROTO_IP, :IP_MULTICAST_TTL, true) > socket.setsockopt(:SOL_SOCKET, :SO_REUSEADDR, true) のどれかが違いを引き起こしていると考えます。 そもそも > socket.setsockopt(:IPPROTO_IP, :IP_MULTICAST_TTL, true) はtrue/false ではなく数値が正しいのではとも思うのですが。。