#45514 [Opn->Fbk]: socket_select + timeout returns immediately on non-blocking connect
ID: 45514
Updated by: jani@php.net
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:
Try using stream_select() and the other stream_* functions instead:
http://www.php.net/manual/en/ref.stream.php
Previous Comments:
------------------------------------------------------------------------
[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 (!@socket_connect($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
Thread (6 messages)