diff options
author | jerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68> | 2001-10-09 05:17:18 +0000 |
---|---|---|
committer | jerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68> | 2001-10-09 05:17:18 +0000 |
commit | 07b9506a284d4075074430bc9533210eaaf4573d (patch) | |
tree | 4321190af7fa4e33b78bc5a85ba8e545a0ba5390 | |
parent | 01cff0a3e333c55377a3feb342901eee86e36806 (diff) | |
download | libapr-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.c | 6 |
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) { |