libuv - 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);
}
解决方案
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);
推荐阅读
- javascript - 为什么在 Tone.js 中 triggerRelease 没有 note 参数?
- clips - CLIPS 检查(读取)值的边界
- collections - 为什么不能收集一定范围的字符?
- python - 我想了解递归过程?
- javascript - SyntaxError: 位置 0 的 JSON 中的意外标记 < - 不知道为什么
- javascript - 在angularjs中的文本框上写一些文本后如何在单击按钮时触发输入键
- recursion - BST中最长的单值路径
- c# - 有没有办法让音乐在某些场景中无缝播放而在其他场景中统一停顿?
- c# - WPF:如何在焦点时自动显示我的 ListView 工具提示
- hive - 在聚合表的列中应用转换因子并使用另一个聚合表执行计算