<div dir="ltr"><div class="gmail_default" style="font-family:courier new,monospace">I hope someone can explain what I'm seeing...</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">I've written a library to interact with TP-Link / Kasa home automation devices</div><div class="gmail_default" style="font-family:courier new,monospace">and part of the function is to 'discover' devices on your network.</div><div class="gmail_default" style="font-family:courier new,monospace">This happens via a UDP broadcast message, that the devices will respond to.</div><div class="gmail_default" style="font-family:courier new,monospace">So you collect all of the responses and build a list of your devices.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace"><div class="gmail_default" style="font-family:courier new,monospace">a) When I wrote the original function I found I needed this <span class="gmail-ng">pseudo</span> code:</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">   <span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">$out = IO::Socket::INET->new(PEERPORT, BROADCAST_ADDR, 'udp');</span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">    $local_port = $out-><span class="gmail-LI gmail-ng">sockport</span>();<br></span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><span style="font-family:monospace">    $in = <span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">IO::Socket::INET->new(PEER_PORT, $local_port, 'udp');</span></span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><span style="font-family:monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">    $out->send($msg);</span></span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><span style="font-family:monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">    $in->recv($rsp, 1024);</span></span></span></div></div><div class="gmail_default" style="font-family:courier new,monospace"></div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">   I.e. For some reason I needed a separate socket to receive on.  Huh... why ?<br></div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">b) Then I wanted to run a test and send a directed UDP message instead.</div><div class="gmail_default" style="font-family:courier new,monospace">   So I used the same code, except I used the specific IP address instead of the broadcast address.</div><div class="gmail_default" style="font-family:courier new,monospace">   But I found it would NOT receive the response.</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">   I had to recv() on the 'out' socket (as you would have expected)</div><div class="gmail_default" style="font-family:courier new,monospace">   receiving on that 'in' port no longer works.  I.e.<br></div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace"></div><div class="gmail_default" style="font-family:courier new,monospace">   <span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">$out = IO::Socket::INET->new(PEERPORT, "192.168.1.25", 'udp');</span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">    </span><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">$out->send($msg);</span></span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><span style="font-family:monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">    $out->recv($rsp, 1024);</span></span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><span style="font-family:monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"><br></span></span></span></div><div class="gmail_default" style="font-family:courier new,monospace"><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">So...</div><div class="gmail_default" style="font-family:courier new,monospace">- why do I have to do a) (use two sockets) ?</div><div class="gmail_default" style="font-family:courier new,monospace">- If I have to do a) for broadcast addresses, why doesn't it also work using a specific IP address ?</div><div class="gmail_default" style="font-family:courier new,monospace">- and more importantly... why can't I just do b) to a broadcast address ?</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">Thanks</div><div class="gmail_default" style="font-family:courier new,monospace">Fulko</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><span style="font-family:monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"></span></span></span></div></div>