ID: 36918 Updated by: [EMAIL PROTECTED] Reported By: brud5_99 at yahoo dot com -Status: Assigned +Status: Closed Bug Type: Streams related Operating System: linux (gentoo) PHP Version: 5.1.2 -Assigned To: wez +Assigned To: jani New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2007-07-17 13:25:51] [EMAIL PROTECTED] Your code is a bit buggy, I can't get it working even after fixing the bug. See bug #36796 for a bit better (simpler :) example. ------------------------------------------------------------------------ [2006-04-10 12:26:56] [EMAIL PROTECTED] Wez, I remember you bogusing similar bugs like this before..perhaps you have some insight on this. ------------------------------------------------------------------------ [2006-03-30 15:10:32] brud5_99 at yahoo dot com Thank you for the quick reply. Unfortunately the latest version didn't fix the problem for me. It still only loops until a connection is made. Once the connection is established, it gets stuck on "loop1". Then it runs a whole loop once if you send input, and stops on loop1 again. If you disconnect it resumes looping. ------------------------------------------------------------------------ [2006-03-30 11:36:38] [EMAIL PROTECTED] 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. ------------------------------------------------------------------------ [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