summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authorrbb <rbb@13f79535-47bb-0310-9956-ffa450edef68>2001-08-07 20:24:50 +0000
committerrbb <rbb@13f79535-47bb-0310-9956-ffa450edef68>2001-08-07 20:24:50 +0000
commitfc480a741f5d10b204c08d5334fbb6ecda2c6612 (patch)
tree392cd67b17b6c1c9e9d47bbdf101ea2b248a6b87 /network_io
parent2f88d5a7009212db7ec3ad5a60bd69e44850e67a (diff)
downloadlibapr-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.c13
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;
}
}