summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authorrbb <rbb@13f79535-47bb-0310-9956-ffa450edef68>1999-11-15 19:49:54 +0000
committerrbb <rbb@13f79535-47bb-0310-9956-ffa450edef68>1999-11-15 19:49:54 +0000
commite76eb4ab9f4ad9a6313226cc16f7f3570577acbc (patch)
tree99b8bd42ad8f3482970b821963dd10945aadc3ae /network_io
parentac4dc4f548ba8d312bb12b5c1d1d4fbcadac92cb (diff)
downloadlibapr-e76eb4ab9f4ad9a6313226cc16f7f3570577acbc.tar.gz
Moving Unix socket IOL's to use APR. Also fixed a small bug in ap_recv.
We should NEVER return a status of APR_EAGAIN and say -1 bytes read. This can cause some strange bugs. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@59476 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r--network_io/unix/sendrecv.c4
-rw-r--r--network_io/unix/sockopt.c3
2 files changed, 7 insertions, 0 deletions
diff --git a/network_io/unix/sendrecv.c b/network_io/unix/sendrecv.c
index 6d9a0ce8e..628bbaa43 100644
--- a/network_io/unix/sendrecv.c
+++ b/network_io/unix/sendrecv.c
@@ -169,6 +169,10 @@ ap_status_t ap_recv(struct socket_t *sock, char *buf, ap_ssize_t *len)
} while (rv == -1 && errno == EINTR);
}
}
+ else if (rv == -1 && errno == EAGAIN && sock->timeout == 0) {
+ (*len) = 0;
+ return errno;
+ }
(*len) = rv;
return APR_SUCCESS;
}
diff --git a/network_io/unix/sockopt.c b/network_io/unix/sockopt.c
index 4ad020e8d..4d2b912f5 100644
--- a/network_io/unix/sockopt.c
+++ b/network_io/unix/sockopt.c
@@ -176,6 +176,9 @@ ap_status_t ap_setsocketopt(struct socket_t *sock, ap_int32_t opt, ap_int32_t on
}
if (opt & APR_SO_TIMEOUT) {
sock->timeout = on;
+ if ((stat = sononblock(sock->socketdes)) != APR_SUCCESS) {
+ return stat;
+ }
}
return APR_SUCCESS;
}