首页 > 解决方案 > libuv 错误 - 未初始化的流

问题描述

我正在尝试使用 libuv 发送一些数据。客户端连接到服务器,服务器接受连接,然后客户端尝试使用 uv_write 写入(printf 是输出,所以我知道它已经到了这一步)。结果是

 uv_write2: Assertion `(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || stream->type == UV_TTY) && "uv_write (unix) does not yet support other types of streams"' failed.

这让我认为不能初始化流。代码如下,我做错了什么?

void OnConnectToServer(uv_connect_t *client, int status) 
{
    if (status < 0) 
    {
        return;
    }

    printf( "Client attempt write\n" );

    write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t));
    req->buf = uv_buf_init( (char*) malloc(1), 1 );     
    (req->buf.base)[0] = '0';
    uv_write((uv_write_t*) req, client->handle, &req->buf, 1, OnWrite); 
}

void SendData( uv_async_t*sd )
{
    uv_tcp_t client;
    uv_tcp_init(loop, &client);
    uv_connect_t* connect = (uv_connect_t*)malloc(sizeof(uv_connect_t));
    struct sockaddr_in dest;
    uv_ip4_addr("192.168.20.3", PORT, &dest);
    uv_tcp_connect(connect, &client, (const struct sockaddr*)&dest, OnConnectToServer);
}

标签: libuv

解决方案


uv_write_t是正确的结构,但你不能使用req->buf哪个是私有字段。您必须像这样声明一个新变量:

uv_write_t *req = (uv_write_t*) malloc(sizeof(uv_write_t));
uv_buf_t buf = uv_buf_init( (char*) malloc(1), 1 );
buf.base[0] = '0';
uv_write(req, client->handle, &buf, 1, OnWrite); 

推荐阅读