in reply to udp broadcast

I think you don't need to set up all those options the way you did, the following is enough for me to recieve UDP broadcasts.

use IO::Socket::INET; my $sock = IO::Socket::INET->new( Proto => 'udp', LocalPort => 4210 ); $sock->recv(my $data, 100) or die $!; print "<<$data>>\n";

Test via echo "Hello World" | socat - UDP-DATAGRAM:255.255.255.255:4210,broadcast

Of course, if you've got a firewall, it has to allow incoming UDP packets on that port.

Replies are listed 'Best First'.
Re^2: udp broadcast
by oha (Friar) on May 13, 2020 at 09:26 UTC
    great! thanks!

    I'm still confused why this work this way, since 4210 is not the local port, but the broadcast port. nevertheless it works and i'm happy :)

      Glad to help!

      I'm still confused why this work this way, since 4210 is not the local port, but the broadcast port.

      It's the port you're listening on, on the local machine. (The sender is not necessarily sending from their port 4210, they may be sending from a random port, but their packets are addressed to port 4210 on the receiving side. Update: You can see this in the tcpdump output you showed: "192.168.0.50.49153 > 192.168.0.255.4210")

      BTW, if you want to get the address from which the packet was sent, you can call $sock->peerhost immediately after the recv.