[ruby-list:50368] Re: [質問] Ruby socket.send でUDP Packet が出ない? ネットワーク環境によるものか?
From:
<yamataka@...08.itscom.net>
Date:
2016-08-02 10:39:07 UTC
List:
ruby-list #50368
市田さん
山口です。
サポートありがとうございます。
> 今日再度実行したのですが、ごく稀に成功、ほとんどが失敗という不思議な状
況
> に変わりました :(
>
> Starting SSDP search...
> Couldn't find any UPnP devices.
今、同じ状況にはまっております。
> Wiresharkでみた時、マルチキャストパケットが発信されていないように思え
た
> ので、色々試行錯誤してみたところ、socketを作成するときにネットワークイ
ン
> タフェースを明示的に指定したところ、安定して動作するようになりました。
ご提示いただいた下記の様に、
> def build_socket
> socket = UDPSocket.open
> socket.do_not_reverse_lookup = true
>
> mif = IPAddr.new('192.168.11.24').hton
> socket.setsockopt(:IPPROTO_IP, Socket::IP_MULTICAST_IF, mif)
>
> socket.setsockopt(:IPPROTO_IP, :IP_MULTICAST_TTL, true)
> socket.setsockopt(:SOL_SOCKET, :SO_REUSEADDR, true)
> socket
> end
IPアドレス部分を自IPアドレスにし、実行しましたが
yama@JPC20165182:~/.gem/ruby/gems/easy_upnp-1.1.10/bin$ ipconfig /all |
grep -i ipv4
IPv4 Address. . . . . . . . . . . : 192.168.0.134(Preferred)
yama@JPC20165182:~/.gem/ruby/gems/easy_upnp-1.1.10/lib/easy_upnp$ tail -
n 15 ssdp_searcher.rb
socket = UDPSocket.open
socket.do_not_reverse_lookup = true
# supported by Ichida start
mif = IPAddr.new('192.168.0.134').hton
socket.setsockopt(:IPPROTO_IP, Socket::IP_MULTICAST_IF, mif)
# supported by Ichida end
socket.setsockopt(:IPPROTO_IP, :IP_MULTICAST_TTL, true)
socket.setsockopt(:SOL_SOCKET, :SO_REUSEADDR, true)
socket
end
end
end
yama@JPC20165182:~/.gem/ruby/gems/easy_upnp-1.1.10/bin$ ./upnp-list -t
150
Starting SSDP search...
Couldn't find any UPnP devices.
の様に、市田さんの再実行時(ソフト修正前)と同じ状況になってしまいました。
Wiresharkで確認したところ、M-SEARCH Packetが出てから、約1m40s後に、
NOTIFY のPacketが届く場合もあり、
-t 150 (timeout を 150sに設定) にもしましたが、状況変わらずです。
プログラムがブロックしているので、^C しましたが、以前は出ていたトレース
も出力されなくなり…
解析がさらに難しくなってきました。
セキュリティソフト等通信に影響の出るものは無いようにしております。
他に原因を突き止める方法があれば、ご教示いただければ幸いです。