diff options
author | rbb <rbb@13f79535-47bb-0310-9956-ffa450edef68> | 1999-11-15 19:49:54 +0000 |
---|---|---|
committer | rbb <rbb@13f79535-47bb-0310-9956-ffa450edef68> | 1999-11-15 19:49:54 +0000 |
commit | e76eb4ab9f4ad9a6313226cc16f7f3570577acbc (patch) | |
tree | 99b8bd42ad8f3482970b821963dd10945aadc3ae /network_io | |
parent | ac4dc4f548ba8d312bb12b5c1d1d4fbcadac92cb (diff) | |
download | libapr-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.c | 4 | ||||
-rw-r--r-- | network_io/unix/sockopt.c | 3 |
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; } |