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