ID: 44955
User updated by: fidojones at fidojones dot com
Reported By: fidojones at fidojones dot com
-Status: Assigned
+Status: Closed
Bug Type: Sockets related
Operating System: Linux
PHP Version: 5.2.6
Assigned To: felipe
New Comment:
Aparently socket_select acts completely diferent as past versions.
Nanoweb server has been fixed to work with this versions:
old version in nanoweb before 5.2.6:
$ns=socket_select($lnset, $write=NULL, $except=NULL, 1);
if ($ns) {
if ($lnset[0]==$children_sck) {
new version in nanoweb from 5.2.6:
$ns=socket_select($lnset, $write=NULL, $except=NULL, 1);
if ($ns) foreach ($lnset as $lnact) {
if ($lnact==$children_sck) {
So I think it's not a bug, but acts different as older versions.
Previous Comments:
------------------------------------------------------------------------
[2008-07-14 21:29:57] [EMAIL PROTECTED]
Felipe, you break -> you fix. Or revert the patch you applied that
obviously causes the problem.
------------------------------------------------------------------------
[2008-05-09 18:12:36] fidojones at fidojones dot com
I'm using the socket.c file in ext/socket/ from php 5.2.5 in php 5.2.6
and all is working fine. And the only diff in socket.c is the patch
http://bugs.php.net/bug.php?id=44197 ,so explain me if not related with
this patch, why is working perfect? if I only overwrite the socket.c
file...
You should test the script and say me if you see the execution
diference and I encourage to try http://nanoweb.si.kz/ that has been
working with all php versions from 4 to 5.2.5 and only fails with php
5.2.6.
------------------------------------------------------------------------
[2008-05-09 17:50:12] [EMAIL PROTECTED]
The problem isn't related with the patch... It just fixed a problem in
socket_select(). Your script doesn't use it.
------------------------------------------------------------------------
[2008-05-09 16:27:02] [EMAIL PROTECTED]
Assigned to Felipe who broke this.
------------------------------------------------------------------------
[2008-05-09 14:58:09] fidojones at fidojones dot com
Description:
------------
This bugfixed
http://bugs.php.net/bug.php?id=44197
make work socket arrays some strange.
I think that some HASH_KEY is not contemplate in switch case line 605
switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(sock_array), &key,
&key_len, &num_key, 0, NULL)) {
Nanoweb server http://nanoweb.si.kz/, when try to access it, eat cpu at
99% time with this socket patch.
Reproduce code:
---------------
<?php
$ary = array();
$strone = 'Message From Parent.';
$strtwo = 'Message From Child.';
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $ary) === false) {
echo "socket_create_pair() failed. Reason:
".socket_strerror(socket_last_error());
}
$pid = pcntl_fork();
if ($pid == -1) {
echo 'Could not fork Process.';
} elseif ($pid) {
/*parent*/
socket_close($ary[0]);
if (socket_write($ary[1], $strone, strlen($strone)) === false) {
echo "socket_write() failed. Reason:
".socket_strerror(socket_last_error($ary[1]));
}
if (socket_read($ary[1], strlen($strtwo), PHP_BINARY_READ) ==
$strtwo) {
echo "Recieved $strtwo\n";
}
socket_close($ary[1]);
} else {
/*child*/
socket_close($ary[1]);
if (socket_write($ary[0], $strtwo, strlen($strtwo)) === false) {
echo "socket_write() failed. Reason:
".socket_strerror(socket_last_error($ary[0]));
}
if (socket_read($ary[0], strlen($strone), PHP_BINARY_READ) ==
$strone) {
echo "Recieved $strone\n";
}
socket_close($ary[0]);
}
?>
Expected result:
----------------
php 5.2.5 result:
bash$ php socket.php
Recieved Message From Child.
Recieved Message From Parent.
Actual result:
--------------
php 5.2.6 result:
bash# php socket.php
Recieved Message From Child.
bash# Recieved Message From Parent.
An here wait and you should hit return to see the bash prompt again
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=44955&edit=1