finite number of bytes (i.e. *readbytes > 0).
ap_brigade_partition does a blocking read. So, what we should do is
apr_bucket_read on the socket for non-blocking. If we get less than
what they asked for, that's okay and we should just return that amount.
If they were non-blocking, we should always be non-blocking.
Ryan, Greg, and others can figure out if ap_brigade_partition should
be tweaked to handle AP_NONBLOCK_READ natively. I'm of a mixed mind,
but this addresses the short term need.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91312
13f79535-47bb-0310-9956-
ffa450edef68
apr_bucket *e;
apr_bucket_brigade *newbb;
+ if (mode == APR_NONBLOCK_READ) {
+ e = APR_BRIGADE_FIRST(ctx->b);
+ rv = apr_bucket_read(e, &str, &len, mode);
+
+ if (len < *readbytes)
+ *readbytes = len;
+ }
+
apr_brigade_partition(ctx->b, *readbytes, &e);
+
/* Must do split before CONCAT */
newbb = apr_brigade_split(ctx->b, e);
APR_BRIGADE_CONCAT(b, ctx->b);