首先讓我說,我不知道的狀態,如果這是一個OSX問題,或者我離開出來的東西不recieving廣播:二郎gen_udp時{IP,地址} specificed Socket的
目標我需要指定用於UDP通信的接口適配器,以避免與使用相同端口的其他軟件衝突。 (將有2個網絡適配器)。
問題:當{IP,地址}選項中指定gen_udp
接口適配器,但是它的工作原理,當我不使用{IP,地址}選項無法按預期接收廣播消息。我收到發送到255.255.255.255或192.168.1.255(都是工作)的廣播消息。
{ok,Socket} = gen_udp:open(Port,[{broadcast, true},{reuseaddr, true}]).
一旦我添加了{ip,Address}選項來指定使用哪個接口適配器,它將停止接收廣播。我可以通過wireshark看到消息,但套接字沒有收到它們。
{ok,Socket} = gen_udp:open(Port,[{broadcast, true},{reuseaddr, true},{ip,Address}]).
我注意到在沒有使用{ip,Address}選項的情況下,Socket的地址爲{0,0,0,0}。通過inet:sockname(Socket)。
我在想什麼?
當插座綁定到0.0.0.0它將從任何接口接收。你確定當你使用{ip,Address}時,數據包被髮送到你綁定的接口嗎? –
當我使用wireshark並選擇了目標接口({ip,Address}的接口)時,我可以看到廣播信息包。所以我假設數據包正在發送併到達接口。如預期的那樣,它們出現在wireshark目的地爲255.255.255.255的地方,這與Address不同。所以我認爲它們被忽略或者沒有被socket處理,因爲它們不匹配。當我不使用{ip,Address}但Socket接收數據時,我看到了同樣的情況。 – casillic