ID: 33568 User updated by: shaun at verticalevolution dot com Reported By: shaun at verticalevolution dot com -Status: Feedback +Status: Open Bug Type: Sockets related Operating System: Windows XP SP2 PHP Version: 5CVS-2005-07-05 Assigned To: wez New Comment:
I've taken a look at your slides and I've also tried the stream_get_contents instead of the feof. This still does not work. Instead once the client makes the call the server now uses 100% CPU usage and still hangs. Server code: <?php $sock = stream_socket_server('tcp://127.0.0.1:1899', $errno, $errstr); $i = ''; while(1){ $read = Array($sock); $ready = stream_select($read, $write = NULL, $except = NULL, 10); $c = stream_socket_accept($sock); $read[] = $c; var_dump(stream_get_meta_data($c)); $i = stream_get_contents($c, -1); echo $i; fwrite($c, 'testback'); break; } fclose($sock); ?> client code: <?php $output = ''; $sock = stream_socket_client('tcp://127.0.0.1:1899',$errcode, $errstr); fwrite($sock, 'test'); $output = stream_get_contents($sock, -1); fclose($sock); echo $output; ?> Previous Comments: ------------------------------------------------------------------------ [2005-07-05 16:10:36] [EMAIL PROTECTED] Take a look through these slides: http://netevil.org/talks/index.php?t=lucky-dip Pay particular attention to the part that talks about feof() and network streams. (hint: use stream_get_contents()) ------------------------------------------------------------------------ [2005-07-05 14:33:12] shaun at verticalevolution dot com Please note also that I've tried the new scripts with the CVS snapshot as well. PHP Version: 5.1.0-dev ------------------------------------------------------------------------ [2005-07-05 14:22:22] shaun at verticalevolution dot com I moved the read array into the while script, this was a mistake on my part. This little server script is just a test to try to simplify my over all object. New Server Script: <?php $sock = stream_socket_server('tcp://127.0.0.1:1899', $errno, $errstr); $i = ''; while(1){ $read = Array($sock); $ready = stream_select($read, $write = NULL, $except = NULL, 10); $c = stream_socket_accept($sock); $read[] = $c; var_dump(stream_get_meta_data($c)); while(!feof($c)){ $i .= fread($c, 12); } var_dump(stream_get_meta_data($c)); echo $i; fwrite($c, 'testback'); break; } fclose($sock); ?> I only reason I had the stream_set_timeout in the client script because if I did not then the client just hangs with out ever quiting. I did remove it as per your request and I let it run for about 2 minutes with it never coming back. New Client script: <?php $output = ''; $sock = stream_socket_client('tcp://127.0.0.1:1899',$errcode, $errstr); fwrite($sock, 'test'); while(!feof($sock)){ $output .= fread($sock, 1024); } fclose($sock); echo $output; ?> After this I still don't get the fread every coming back. ------------------------------------------------------------------------ [2005-07-05 13:46:03] [EMAIL PROTECTED] Please also remove the stream_set_timeout() call from your script(s) and note that you are not using stream_select() correctly (the read/write/excep arrays need to be set on *each* call). ------------------------------------------------------------------------ [2005-07-04 21:58:30] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/33568 -- Edit this bug report at http://bugs.php.net/?id=33568&edit=1