* Thus wrote Ren Fournier ([EMAIL PROTECTED]):
> Hi,
>
> I have this code (below) that waits for particular data to come over
> the socket ("ENX"), at which point it breaks out of the loop and does
> other things. Presently, it will loop forever, until it receives
> "ENX"�a good start�but I also need it to break-out if the loop runs
> longer than five seconds. This is where I'm having a problem. It seems
> that it is only reading once data comes over the socket, so it is stuck
> on that first 'while' line ("while(($buf =
> socket_read($socket,128,PHP_BINARY_READ)) !== false) {").
>
> $timer = time();
> while(($buf = socket_read($socket,128,PHP_BINARY_READ)) !== false) {
> $data .= $buf;
> $elapsed = time() - $timer;
> if(preg_match("/ENX/", $data)) {
> break;
> } elseif ($elapsed > 5) {
> echo "TOO LONG!\n";
> break;
> }
> }
>
> Maybe set non-blocking / blocking socket is the answer? Only problem is
> I can't find much [good] documentation describing what blocking and
> non-blocking sockets are good for, etc. Any ideas? Thanks.
blocking - wait for response or till timeout
non-blocking - return right away
If you use blocking and then set the timeout for the read, you can
just check for socket_last_error() after the loop.
socket_set_block($socket);
socket_set_option($socket, SO_RCVTIMEO, 5000); // milliseconds iirc
while(($buf = socket_read($socket,128,PHP_BINARY_READ)) !== false) {
//...
}
if ($error = socket_last_error($socket) ) {
echo "socket error [$error]:" . socket_strerror($error);
}
or something like that.
Curt
--
"I used to think I was indecisive, but now I'm not so sure."
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php