chainbuffer fixed
This commit is contained in:
18
reactor.c
18
reactor.c
@@ -12,6 +12,7 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/timerfd.h>
|
||||
#include <sys/uio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "diskuring/diskuring.h"
|
||||
@@ -200,8 +201,17 @@ int recv_cb(int fd) {
|
||||
|
||||
c = &conn_list[fd];
|
||||
while (1) {
|
||||
uint8_t tmp[RECV_BATCH_BYTES];
|
||||
ssize_t n = recv(fd, tmp, sizeof(tmp), 0);
|
||||
struct iovec iov[4];
|
||||
int iovcnt = chain_buffer_prepare_recv_iov(&c->rbuf, iov, (int)(sizeof(iov) / sizeof(iov[0])));
|
||||
ssize_t n;
|
||||
|
||||
if (iovcnt < 0) {
|
||||
printf("fd=%d prepare recv iov failed: %s\n", fd, strerror(errno));
|
||||
close_conn(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
n = readv(fd, iov, iovcnt);
|
||||
|
||||
if (n > 0) {
|
||||
size_t cur_len = chain_buffer_len(&c->rbuf);
|
||||
@@ -210,8 +220,8 @@ int recv_cb(int fd) {
|
||||
close_conn(fd);
|
||||
return 0;
|
||||
}
|
||||
if (chain_buffer_append(&c->rbuf, tmp, (size_t)n) < 0) {
|
||||
printf("fd=%d append read buffer failed: %s\n", fd, strerror(errno));
|
||||
if (chain_buffer_commit_recv(&c->rbuf, (size_t)n) != (size_t)n) {
|
||||
printf("fd=%d commit recv buffer failed\n", fd);
|
||||
close_conn(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user