|
|
|
@ -78,6 +78,8 @@ liNetworkStatus li_network_read(liVRequest *vr, int fd, liChunkQueue *cq) {
|
|
|
|
|
off_t max_read = 16 * blocksize; /* 256k */ |
|
|
|
|
ssize_t r; |
|
|
|
|
off_t len = 0; |
|
|
|
|
liWorker *wrk = vr->wrk; |
|
|
|
|
GByteArray *buf = wrk->network_read_buf; |
|
|
|
|
|
|
|
|
|
if (cq->limit && cq->limit->limit > 0) { |
|
|
|
|
if (max_read > cq->limit->limit - cq->limit->current) { |
|
|
|
@ -90,10 +92,8 @@ liNetworkStatus li_network_read(liVRequest *vr, int fd, liChunkQueue *cq) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
do { |
|
|
|
|
GByteArray *buf = g_byte_array_sized_new(blocksize); |
|
|
|
|
g_byte_array_set_size(buf, blocksize); |
|
|
|
|
if (-1 == (r = li_net_read(fd, buf->data, blocksize))) { |
|
|
|
|
g_byte_array_free(buf, TRUE); |
|
|
|
|
switch (errno) { |
|
|
|
|
case EAGAIN: |
|
|
|
|
#if EWOULDBLOCK != EAGAIN |
|
|
|
@ -107,11 +107,11 @@ liNetworkStatus li_network_read(liVRequest *vr, int fd, liChunkQueue *cq) {
|
|
|
|
|
return LI_NETWORK_STATUS_FATAL_ERROR; |
|
|
|
|
} |
|
|
|
|
} else if (0 == r) { |
|
|
|
|
g_byte_array_free(buf, TRUE); |
|
|
|
|
return len ? LI_NETWORK_STATUS_SUCCESS : LI_NETWORK_STATUS_CONNECTION_CLOSE; |
|
|
|
|
} |
|
|
|
|
g_byte_array_set_size(buf, r); |
|
|
|
|
li_chunkqueue_append_bytearr(cq, buf); |
|
|
|
|
wrk->network_read_buf = buf = g_byte_array_sized_new(blocksize); |
|
|
|
|
len += r; |
|
|
|
|
} while (r == blocksize && len < max_read); |
|
|
|
|
|
|
|
|
|