l.frankline has asked for the wisdom of the Perl Monks concerning the following question:

Hi,
I am trying to connect to a IMS server through Socket connection, while reading the file handler SOCK, the program is not coming out of the while loop. Please let me know what is the problem over here. Please tell me why the program is not coming out of the while loop. Thanks in advance. Regards, Franklin

use Socket; $iaddr = inet_aton($IMS_SERVER) or die "error could not connect to IMS +' $paddr = sockaddr_in($IMS_PORT, $iaddr); $proto = getprotobyname('tcp'); $IRM_message = pack "NnnA8NNA8nnA8A8A8A8A8A8nnA$msgin_len nn", $IRMlen, 80, 0, "*IRMREQ*", 0, 0, "", 32, 64, $trancode, $IMSID, "", "$RACFID", "", "$RACFPW", $tranlen, 0, $message_in, 4, 0; socket(SOCK, AF_INET, SOCK_STREAM, $proto) or &ErrorScreen(0, "socket +failed: $!"); if (!(connect(SOCK,$paddr))){ print "OTMA connect failed<br>"; return $message_out; } else { send(SOCK,$IRM_message,0) or &ErrorScreen(0, "send IRM: $!"); while (read(SOCK,$tmp_msg,2048) > 0 ) { $message_out .= $tmp_msg; } close(SOCK);

Replies are listed 'Best First'.
Re: socket connection - hanging
by jethro (Monsignor) on Jul 16, 2009 at 10:59 UTC
    Is the while loop hanging in the read() or looping endlessly?

    If the former the server probably still expects data, so you might just give it another random parameter to see if you get an error message. If not, add another parameter to the pack statement until you get one. Hopefully the error message can tell you what was expected.