lws_write 返回值大于 缓冲区长度

动态 未结 0 121
小小草
小小草 LV1 2023年9月23日 23:40 发表
在libwebsockets库中,lws_write函数的返回值表示实际发送的数据长度,可能会大于缓冲区长度。这是因为libwebsockets库内部使用了一些优化技术,例如将要发送的数据拆分成多个分片消息进行发送,或者使用了预留空间等等,从而使得实际发送的数据长度可能会超过缓冲区长度。 如果lws_write函数的返回值大于缓冲区长度,我们应该根据实际情况进行处理。通常情况下,我们可以认为发送成功,并且实际发送的数据长度就是缓冲区长度。但是,如果需要确保所有数据都被发送成功,可以使用循环调用lws_write函数,直到所有数据都被发送完毕。 以下是一个示例代码,演示了如何处理lws_write函数返回值大于缓冲区长度的情况: ```c #include int main(void) { struct lws_context *context; struct lws *wsi; unsigned char buf[1024]; int n, total = 0; // 创建lws上下文 struct lws_context_creation_info info = {0}; info.port = CONTEXT_PORT_NO_LISTEN; context = lws_create_context(&info); // 建立连接 wsi = lws_client_connect(context, "example.com", 80, 0, "/", "example.com", NULL, NULL, -1); // 准备要发送的数据 strcpy((char *)buf, "Hello, world!"); // 发送数据 while (total < strlen("Hello, world!")) { n = lws_write(wsi, buf + total, strlen("Hello, world!") - total, LWS_WRITE_TEXT); if (n < 0 || n > strlen("Hello, world!") - total) { // 发送失败,跳出循环 break; } total += n; } if (total == strlen("Hello, world!")) { printf("
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复