ID: 33568
Updated by: [EMAIL PROTECTED]
Reported By: shaun at verticalevolution dot com
Status: Open
Bug Type: Sockets related
Operating System: Windows XP SP2
PHP Version: 5CVS-2005-07-05
Assigned To: wez
New Comment:
Your usage of stream_select() is still wrong.
$read_master = array($sock);
while (1) {
$read = $read_master;
stream_select($read...)
$c = stream_socket_accept()
$read_master[] = $c;
}
Previous Comments:
------------------------------------------------------------------------
[2005-07-05 16:36:15] shaun at verticalevolution dot com
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;
?>
------------------------------------------------------------------------
[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).
------------------------------------------------------------------------
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