redis-3.0-annotated icon indicating copy to clipboard operation
redis-3.0-annotated copied to clipboard

关于客户端源码hiredis读取服务端响应问题

Open wangfly80 opened this issue 6 years ago • 0 comments

读取服务端响应没有对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;

}

wangfly80 avatar Nov 17 '18 08:11 wangfly80