ID:               36918
 Updated by:       [EMAIL PROTECTED]
 Reported By:      brud5_99 at yahoo dot com
-Status:           Open
+Status:           Feedback
 Bug Type:         Streams related
 Operating System: linux (gentoo)
 PHP Version:      5.1.2
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php5.1-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.1-win32-latest.zip

That's exactly what I get: lots of "keep looping" and notices.


Previous Comments:
------------------------------------------------------------------------

[2006-03-30 00:30:21] brud5_99 at yahoo dot com

Description:
------------
stream_set_blocking seems to get ignored. There are no 
errors or warnings, but the socket behaves as if it was set 
to blocking.
The same code works as expected with php 5.0.1 on a FreeBsd 
box, but not with 5.1.2 under gentoo linux. The piece of 
code sample included is all that's needed to see the 
problem.
Php is configured as stand-alone, not as an apache module.

Thanks a lot for any help you can provide!
bernie

./configure --without-pear --without-apache --with-sockets 
--enable-sockets --with-mysql-sock=/tmp/mysql.sock --with-
mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/
mysql_config --enable-pcntl  --enable-pcntl --enable-sysvshm 
--enable-sysvsem --enable-sigchild --with-config-file-path=/
usr/local/phpForCgi/conf --prefix=/usr/local/phpForCgi --
sysconfdir=/usr/local/phpForCgi/conf


Reproduce code:
---------------
<?php
set_time_limit (0); error_reporting (2047);
$sock = stream_socket_server("tcp://0.0.0.0:7000", $errno, $errstr);
stream_set_blocking($sock, 0);
$counter = 0;
if (!isset($sockCount)) {$sockCount = 0; }
while(true) {
        $msgsock[$sockCount] = @stream_socket_accept($sock, 0);
        if (is_resource($msgsock[$sockCount])) { $sockCount++; }
        $counter = 0;
        while($counter < $sockCount + 1) {
                if (is_resource($msgsock[$counter])) {
echo "loop1:\n";
                        $buf = fread($msgsock[$counter],2048);
echo "loop2: $buf\n";
                }                       
echo "keep looping: $buf\n";
                if ($buf) { echo "buf: $buf\n"; }
                $counter++;
        }
}
fclose ($sock);
?>


Expected result:
----------------
It should echo "keep looping" if there is no input

Actual result:
--------------
It keeps echoing "keep looping" until a connection is made. 
After input was received (made a telnet connection to port 
7000 and sent some text thru), the trace stops at "loop1". 
Only about every 30sec(or so) it does a complete loop. I think 
that is after fread() times out intenally.
Also, if the connction is closed, it keeps looping thru "keep 
looping" again.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=36918&edit=1

Reply via email to