Skip to content

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

@wangfly80

Description

@wangfly80

读取服务端响应没有对tcp数据流进行粘包和拆包,这个应该有问题吧

调用read返回的nread长度不一定等于一条完整消息的长度吧,有可能会小于。
int redisBufferRead(redisContext c) {
char buf[1024
16];
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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions