#36918 [Fbk->Opn]: stream_set_blocking doesn't work
| From: | brud5_99 at yahoo dot com | Date: | Thu, 30 Mar 2006 13:10:34 +0000 |
| Subject: | #36918 [Fbk->Opn]: stream_set_blocking doesn't work | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-95117@lists.php.net to get a copy of this message | ||
ID: 36918
User updated by: brud5_99 at yahoo dot com
Reported By: brud5_99 at yahoo dot com
-Status: Feedback
+Status: Open
Bug Type: Streams related
Operating System: linux (gentoo)
PHP Version: 5.1.2
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[2006-03-30 11:36:38] tony2001@php.net
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