ID: 46049
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Assigned
Bug Type: Streams related
Operating System: Linux
PHP Version: 5.3CVS-2008-09-11 (CVS)
Assigned To: dsp
New Comment:
Thanks Alexey, I fixed this one.
Previous Comments:
------------------------------------------------------------------------
[2008-11-05 14:43:02] [EMAIL PROTECTED]
Probably related problem (example with 2 files):
[server.php]
<?php
$socket = stream_socket_server('tcp://127.0.0.1:9999');
$conn = stream_socket_accept($socket, -1);
var_dump(microtime(true));
$data = stream_get_contents($conn, 1);
var_dump(microtime(true));
?>
[client.php]
<?php
$socket = stream_socket_client('tcp://127.0.0.1:9999');
fwrite($socket, ',');
sleep(600); //setting ridiculously high
?>
Steps to reproduce:
1) start server.php
2) run client.php
Expected result:
server reads 1 byte from socket as soon, as it encounters it
Actual result:
server waits 60 seconds (default timeout?) before reading 1 byte
------------------------------------------------------------------------
[2008-11-05 13:43:24] [EMAIL PROTECTED]
Jani: I think it's an issue with the ssl socks, as my patch didn't
patch
those. I try to have time to have a look on this, but I
cannot reproduce the patch yet even though I sit down with sebstian and
try to figure out what's going wrong.
------------------------------------------------------------------------
[2008-10-28 22:08:32] [EMAIL PROTECTED]
David, I guess we just have to revert that bad patch of yours then?
------------------------------------------------------------------------
[2008-09-11 12:17:57] [EMAIL PROTECTED]
David, it appears that this problem is caused by this patch of yours:
http://news.php.net/php.cvs/52689
Take a look at it please.
------------------------------------------------------------------------
[2008-09-11 12:13:58] [EMAIL PROTECTED]
Description:
------------
The code below works fine with PHP 5.2.6 (and earlier), but not with
the unreleased PHP 5.2.7 and PHP 5.3.0:
892 $handle = @fopen($url, 'r');
893
894 if (!$handle) {
895 throw new RuntimeException(
896 'Could not connect to the Selenium RC server.'
897 );
898 }
899
900 stream_set_blocking($handle, 1);
901 stream_set_timeout($handle, 0, $this->timeout);
902
903 $info = stream_get_meta_data($handle);
904 $response = '';
905
906 while ((!feof($handle)) && (!$info['timed_out'])) {
907 $response .= fgets($handle, 4096);
908 $info = stream_get_meta_data($handle);
909 }
910
911 fclose($handle);
The code above hangs with PHP 5.2.7 and PHP 5.3.0 in line 906 as shown
using Xdebug's tracing:
fopen() Driver.php:892
stream_set_blocking() Driver.php:900
stream_set_timeout() Driver.php:901
stream_get_meta_data() Driver.php:903
feof() Driver.php:906
fgets() Driver.php:907
stream_get_meta_data() Driver.php:908
feof() Driver.php:906
The second feof() call above hangs.
More information can be found here:
- http://static.phpunit.de/trace.818532121.xt
- http://static.phpunit.de/strace.txt
Changing the loop to
while (!$info['eof'] && !$info['timed_out']) {
$response .= fgets($handle, 4096);
$info = stream_get_meta_data($handle);
}
fixes the problem. This means a difference between feof() and
$info['eof'].
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=46049&edit=1