chainbuffer fixed

This commit is contained in:
2026-03-04 07:20:09 +00:00
parent 57720a3135
commit a190bdeea5
9 changed files with 1335 additions and 78 deletions

View File

@@ -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;
}