http://www.perlmonks.org?node_id=416119

chrism01 has asked for the wisdom of the Perl Monks concerning the following question:

Hi,
I'm having trouble creating a basic UDP listen socket. Should be easy...
#!/usr/bin/perl -w use POSIX; use IO::Socket; use IO::Select; use strict; my ( $listen_socket, # socket to listen on $socket_errmsg # error msg if socket not created ); $listen_socket = IO::Socket::INET->new( LocalAddr =>'a.b.c.d', LocalPort => 7172, Proto => 'udp', Listen => 5, Reuse => 1 ) or $socket_errmsg = "Can't make server listen socket : $@\n"; if( !$listen_socket ) { print $socket_errmsg."\n"; }

and the response is:
Can't make server listen socket : IO::Socket::INET: Operation not supported
Any ideas?
Cheers
Chris

Replies are listed 'Best First'.
Re: UDP socket: Operation not supported
by edan (Curate) on Dec 20, 2004 at 07:38 UTC

    You can't "Listen" on UDP sockets, only TCP, since UDP is a connectionless protocol - it's a message-passing protocol. If you drop the "Listen" parameter to the new(), you'll find that you'll be able to create the socket. You'll then want to call $sock->recv() (with the appropriate arguments), which will block until you receive a message...

    HTH

    --
    edan

      Thx: worked a treat on my RH FC3, but tgt is FreeBSD 5.3-RELEASE-p2, which came up with:
      Can't make server listen socket : IO::Socket::INET: Can't assign requested address
      any ideas?

        This doesn't have anything to do with the operating system. It means you are trying to bind to a local IP address that isn't found on any interface on the host. Did you change the

        LocalAddr => 'a.b.c.d'
        argument to an appropriate local address on the FreeBSD box, or are you trying to bind to the address on the RH box? Do you really care which address you bind to locally? You could just leave this argument out to bind to '*' - that would make life easier...

        --
        edan