首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libuv错误-未初始化流

libuv错误-未初始化流
EN

Stack Overflow用户
提问于 2018-05-31 10:35:34
回答 1查看 161关注 0票数 0

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

代码语言:javascript
复制
 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.

这让我认为流一定不能被初始化。下面是代码,我哪里做错了?

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-11 21:03:25

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

代码语言:javascript
复制
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); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50615833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档