diff options
author | rbb <rbb@13f79535-47bb-0310-9956-ffa450edef68> | 2001-08-07 20:24:50 +0000 |
---|---|---|
committer | rbb <rbb@13f79535-47bb-0310-9956-ffa450edef68> | 2001-08-07 20:24:50 +0000 |
commit | fc480a741f5d10b204c08d5334fbb6ecda2c6612 (patch) | |
tree | 392cd67b17b6c1c9e9d47bbdf101ea2b248a6b87 /network_io | |
parent | 2f88d5a7009212db7ec3ad5a60bd69e44850e67a (diff) | |
download | libapr-fc480a741f5d10b204c08d5334fbb6ecda2c6612.tar.gz |
Non-blocking connects shouldn't be calling connect a second
time. According to Single Unix, a non-blocking connect has
succeeded when the select pops successfully. It has failed
if the select failed. The second connect was causing 502's
in the httpd-proxy.
Submitted by: John Barbee barbee@veribox.net
Reviewed by: Ryan Bloom
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62124 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r-- | network_io/unix/sockets.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/network_io/unix/sockets.c b/network_io/unix/sockets.c index 06a3930c4..3ff01912d 100644 --- a/network_io/unix/sockets.c +++ b/network_io/unix/sockets.c @@ -273,16 +273,9 @@ apr_status_t apr_connect(apr_socket_t *sock, apr_sockaddr_t *sa) * socket; if called again, we can see EALREADY */ if (rc == -1 && (errno == EINPROGRESS || errno == EALREADY) && sock->timeout != 0) { - apr_status_t arv = apr_wait_for_io_or_timeout(sock, 0); - if (arv != APR_SUCCESS) { - return arv; - } - else { - do { - rc = connect(sock->socketdes, - (const struct sockaddr *)&sa->sa.sin, - sa->salen); - } while (rc == -1 && errno == EINTR); + rc = apr_wait_for_io_or_timeout(sock, 0); + if (rc != APR_SUCCESS) { + return rc; } } |