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

I am looking for some help with a perl script I a have written to receive data on a designated port. If there is another way to code this to listen and receive messages, I would appreciate that too. When I run the script I created, I get the following error:
Can't call method "recv" on an undefined value at W:\Developers\Randal +l_c\Working\sms_interface_server_receive.pl line 84.
Here is the code form the perl script:
# Server Program use IO::Socket; print ">> Server Program <<\n"; # Create a new socket my $socket=new IO::Socket::INET(LocalHost => '172.17.8.201', LocalPort +=>2003,Proto=>'tcp'); print "Connection to the socket was successful. +\n"; # Keep receiving messages from client my $def_msg="\nWaiting to +receive message from client.....\n"; my $text =''; my $varlength = 24 +; while(1) { $socket->recv($text,'24'); if($text ne '') { print "\nReceived message '", $text,"'\n"; } # If client message is empty exit else { print "Cilent has exited!"; exit 1; } } }

Replies are listed 'Best First'.
Re: Can't call method "recv" on an undefined value
by ikegami (Patriarch) on Feb 19, 2007 at 18:32 UTC

    Printing "Connection to the socket was successful" doesn't make it so. You're getting the error because $socket is not defined (like the error message says), and it's undefined because your new failed. Use the following construct to get a more meaningful error message:

    my $socket = IO::Socket::INET->new(...) or die("Unable to create socket: $!\n");

    If you're trying to create a server socket, you need to specify a Listen argument. Furthermore, you should probably omit LocalHost.

    If you're trying to create a client socket, you need to specify a PeerAddr and the PeerPort argument, and you should remove LocalHost and LocalPort.