[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 ではなく数値が正しいのではとも思うのですが。。

In This Thread

Prev Next