| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             
             [2006-03-30 11:36 UTC] tony2001@php.net
  [2006-03-30 15:10 UTC] brud5_99 at yahoo dot com
  [2006-04-10 12:26 UTC] sniper@php.net
  [2007-07-17 13:25 UTC] jani@php.net
  [2007-07-17 13:30 UTC] jani@php.net
  | 
    |||||||||||||||||||||||||||||||||||||
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 02:00:01 2025 UTC | 
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.