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

Reply via email to