ID:               45514
 Updated by:       [EMAIL PROTECTED]
 Reported By:      rbarnes at aethon dot com
-Status:           Open
+Status:           Feedback
 Bug Type:         Sockets related
 Operating System: Ubuntu 7.10 / Linux 2.6.22-14
 PHP Version:      5.2.6
 New Comment:

Well, in one other report about basically same issue the comments were
along the lines of "ext/sockets" being "deprecated" and the stream_*
stuff being the suggested way to get working solution. Don't hold your
breath waiting for anything getting fixed in ext/sockets, there's no
maintainer for that.


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

[2008-07-15 15:20:43] rbarnes at aethon dot com

Thanks for the tip, but the point of the bug report is that
socket_select doesn't work properly.  The fact that I could
theoretically rewrite all of the networking code in my API to use the
stream_* functions doesn't change the fact that socket_select is broken.
 I also already know of other ways to implement non-blocking connect
with the socket_* functions, but as I said that also doesn't change the
fact that this juk is bugging me. Yalla, fix it or mark the Berkley
Sockets API deprecated ;-)

------------------------------------------------------------------------

[2008-07-15 13:06:10] [EMAIL PROTECTED]

Try using stream_select() and the other stream_* functions instead:
http://www.php.net/manual/en/ref.stream.php

------------------------------------------------------------------------

[2008-07-14 21:58:01] rbarnes at aethon dot com

Description:
------------
I'm trying to implement a non-blocking connect similar to the one in
Steven's "Unix Network Programming" on pg 450.

I create the socket, set it to non-blocking and call connect which of
course returns immediately with a SOCKET_EINPROGRESS error ( as expected
).

Then I call socket_select with a timeout greater than 0 and
socket_select returns immediately, even though the socket's state is
still SOCKET_EINPROGRESS.

errno 115: Operation now in progress

Reproduce code:
---------------
function ConnectSocket($remote, $port) {
    $sock = NULL;
    if (!($sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP)))
return NULL;

    socket_set_nonblock($sock);

    if ([EMAIL PROTECTED]($sock, $remote, $port+0)) {
        if (socket_select($rin = array($sock), $win = $rin, $ein =
NULL, 30.0) < 1) return NULL;
        
        if (socket_recv($sock, $buf, 0, 0) === false) {
            print socket_strerror(socket_last_error()) . "\n";
            return NULL;
        }
    }
    
    socket_set_block($sock);

    return $sock;      
}

ConnectSocket('206.190.60.37', 80);

Expected result:
----------------
socket_select should block until either the connection completes or the
timeout is exceeded.

Actual result:
--------------
socket_select returns immediately.

SOCKET_EINPROGRESS
Operation now in progress


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=45514&edit=1

Reply via email to