Re: Socket looping challenge
| From: | René Fournier | Date: | Thu, 13 May 2004 23:11:21 +0000 |
| Subject: | Re: Socket looping challenge | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-186174@lists.php.net to get a copy of this message | ||
The script doesn't even get that first "while" condition line. It loops a few times (while receiving messages), then when no more messages are coming from the server, and it times-out, it breaks out of the "while", then returns to the top again, where it that while condition returns the error "Warning: socket_read() unable to read from socket [35]: Resource temporarily unavailable".
This line...
while(($buf = socket_read($socket,128,PHP_BINARY_READ)) !== false) {
...is what returns the error. The whole loop (which needs to keep running).
$msg_recv = 3;
do {
$data = "";
socket_set_block($socket);
socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,$timeout);
while(($buf = socket_read($socket,128,PHP_BINARY_READ)) !== false) {
// THIS IS WHERE IT CHOKES$data .= $buf; if(preg_match("/ENX/",$data)) { $msg_recv = 1; break; } elseif ($error = socket_last_error($socket)) { $msg_recv = 0; echo "\nTIMEOUT: SOCKET ERROR [$error]:" . socket_strerror($error); break; } } if ($msg_recv == 1) { echo "\nMESSAGE RECEIVED\n"; $msg_recv = 3; } elseif ($msg_recv == 0) { echo "\nTIMEOUT: MESSAGE NOT RECEIVED\n"; $msg_recv = 3; } } while ($connection == true); And the output: MESSAGE RECEIVED MESSAGE RECEIVED PHP Warning: socket_read() unable to read from socket [35]: Resource temporarily unavailable in /Users/rene/Sites/gpspolice/titan/cr.php on line 64 Warning: socket_read() unable to read from socket [35]: Resource temporarily unavailable in /Users/rene/Sites/gpspolice/titan/cr.php on line 64 On Thursday, May 13, 2004, at 04:44 PM, Tom Rogers wrote:
Hi, Friday, May 14, 2004, 5:21:10 AM, you wrote: RF> Hi all, RF> Still encountering some challenges with my socket loop. Basically, I RF> need this socket client to wait to read incoming data, but if nothing RF> happens for more than three seconds, I want it to do something, then RF> return to waiting (for another three seconds). I've got some good help RF> from Curt and Tom (thanks guys), but there are evidently still issues RF> with my code. Here's simplified snippet: you need to use break 2; to exit the while and the do - while or set $connection = false; -- regards, Tom