summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68>2001-10-09 05:17:18 +0000
committerjerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68>2001-10-09 05:17:18 +0000
commit07b9506a284d4075074430bc9533210eaaf4573d (patch)
tree4321190af7fa4e33b78bc5a85ba8e545a0ba5390
parent01cff0a3e333c55377a3feb342901eee86e36806 (diff)
downloadlibapr-util-07b9506a284d4075074430bc9533210eaaf4573d.tar.gz
On a non-blocking socket, we may receive EAGAIN from read.
Previously, we would treat that as a fatal error. Now, return a zero-length bucket by letting us fall down to the *len<=0 case. git-svn-id: http://svn.apache.org/repos/asf/apr/apr-util/trunk@58429 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--buckets/apr_buckets_socket.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/buckets/apr_buckets_socket.c b/buckets/apr_buckets_socket.c
index 59148d6b..ab132a88 100644
--- a/buckets/apr_buckets_socket.c
+++ b/buckets/apr_buckets_socket.c
@@ -76,6 +76,12 @@ static apr_status_t socket_read(apr_bucket *a, const char **str,
if (block == APR_NONBLOCK_READ) {
apr_setsocketopt(p, APR_SO_TIMEOUT, timeout);
+ /* There was nothing to read right now, so treat it as okay and
+ * return a 0-length brigade (see below). */
+ if (APR_STATUS_IS_EAGAIN(rv)) {
+ *len = 0;
+ rv = APR_SUCCESS;
+ }
}
if (rv != APR_SUCCESS && rv != APR_EOF) {