ID:               44955
 Updated by:       [EMAIL PROTECTED]
 Reported By:      fidojones at fidojones dot com
-Status:           Assigned
+Status:           Open
 Bug Type:         Sockets related
 Operating System: Linux
 PHP Version:      5.2.6
 Assigned To:      felipe
 New Comment:

The problem isn't related with the patch... It just fixed a problem in
socket_select(). Your script doesn't use it.


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

[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

Reply via email to