I have an open socket that I am reading from. The code looks like the
following:
$contentLength = 0 + $this->response['headers']['content-length'];
do{
$status = socket_get_status($this->socket);
if( $status['eof'] == 1 ) {
if( $this->clientOptions['debug'] & DBGSOCK ) echo("DBG.SOCK status
eof met, finished socket_read\n");
break;
}
if($status['unread_bytes'] > 0) {
if($contentLength > $status['unread_bytes']) {
echo("DBG.SOCK reading {$status['unread_bytes']} bytes...\n");
$buffer = @fread($this->socket, $status['unread_bytes']);
$contentLength = $contentLength - $status['unread_bytes'];
} else {
$buffer = @fread($this->socket, $contentLength);
$contentLength = 0;
}
} else {
if( $this->clientOptions['debug'] & DBGSOCK ) echo("DBG.SOCK reading
{$status['unread_bytes']} bytes...\n");
usleep(1);
continue;
}
$data .= $buffer;
} while($contentLength > 0);
Now, the above code hangs (infinite loop, actually), ultimately returning
something like:
DBG.SOCK reading 3993 bytes...
DBG.SOCK reading 0 bytes...
DBG.SOCK reading 0 bytes...
DBG.SOCK reading 0 bytes...
DBG.SOCK reading 0 bytes...
DBG.SOCK reading 0 bytes...
DBG.SOCK reading 0 bytes...
DBG.SOCK reading 0 bytes...
DBG.SOCK reading 0 bytes...
etc...
On the other hand, if I change the following lines:
$buffer = @fread($this->socket, $status['unread_bytes'] - 1);
$contentLength = $contentLength - $status['unread_bytes'] - 1;
Then I get something that looks like:
DBG.SOCK reading 3993 bytes...
DBG.SOCK reading 1 bytes...
DBG.SOCK reading 1 bytes...
DBG.SOCK reading 1 bytes...
DBG.SOCK reading 1 bytes...
DBG.SOCK reading 1 bytes...
DBG.SOCK reading 1 bytes...
DBG.SOCK reading 1 bytes...
DBG.SOCK reading 1 bytes...
etc...
until the entire response has been read (88771 bytes in this case). Also,
this would mean that the effective fread would be:
$buffer = @fread($this->socket, 0);
However, if I just do:
$data = @fread($this->socket, $contentLength);
it works as expected. So what's going on?
For now, I will use the single command in place of the loop, but I really
wanted to monitor the current unread bytes. Any thoughts appreciated.
---
Seairth Jacobs
[EMAIL PROTECTED]
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php