-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Open
Description
读取服务端响应没有对tcp数据流进行粘包和拆包,这个应该有问题吧
调用read返回的nread长度不一定等于一条完整消息的长度吧,有可能会小于。
int redisBufferRead(redisContext c) {
char buf[102416];
int nread;
/* Return early when the context has seen an error. */
if (c->err)
return REDIS_ERR;
nread = read(c->fd,buf,sizeof(buf));
if (nread == -1) {
if (errno == EAGAIN && !(c->flags & REDIS_BLOCK)) {
/* Try again later */
} else {
__redisSetError(c,REDIS_ERR_IO,NULL);
return REDIS_ERR;
}
} else if (nread == 0) {
__redisSetError(c,REDIS_ERR_EOF,"Server closed the connection");
return REDIS_ERR;
} else {
if (redisReaderFeed(c->reader,buf,nread) != REDIS_OK) {
__redisSetError(c,c->reader->err,c->reader->errstr);
return REDIS_ERR;
}
}
return REDIS_OK;
}
Metadata
Metadata
Assignees
Labels
No labels