in reply to Broadcast when host machine contains virtual interface
After searching for a while, I came up with this solution. First, we create a dummy socket which has the "PeerAddr" points to a reserved IP address. In my case, I tested with 192.168.0.0. Then use "sockhost" method to get the local IP address which is 192.168.1.6. Next we bind the "HostAddr" to the result of "sockhost". So that when the "PeerAddr" is set to 255.255.255.255, it will be the same as 192.168.1.255.
Here is the code:
sub localIPAddress { my $socket = new IO::Socket::INET ( Proto => 'udp', PeerAddr => '192.168.0.0', ); my $localAddress = $socket->sockhost(); $socket->close(); return $localAddress; } my $socket = IO::Socket::INET->new( Proto => 'udp', Broadcast => 1, LocalAddr => localIPAddress(), LocalPort => 8888, PeerAddr => '255.255.255.255', PeerPort => 9999, ) or die "Could not create socket: $!\n";
|
|---|