(libwebsocket)如何在客户端连接上发送数据包

时间:2018-07-31 17:04:20

标签: c websocket libwebsockets

我正在使用libwebsocket lib在Linux上开发一个简单的websocket服务器。
我需要为每个客户端连接在已建立的事件上发送初始化数据包。
如果我使用

memcpy( p, "init", 4);
lws_write(wsi, p, 4, LWS_WRITE_TEXT);

case LWS_CALLBACK_ESTABLISHED:

我收到错误消息

[2018/07/31 18:50:15:5451] ERR: 
[2018/07/31 18:50:15:5451] ERR: 0000: 81 04 69 6E 69 74         ..init
[2018/07/31 18:50:15:5451] ERR: 
[2018/07/31 18:50:15:5451] ERR: ** 0x564b10ce5170: vh: default, prot: lws-minimal, role ws: Illegal back-to-back write of 6 detected...

从文档中我读到,我在此阶段无法回忆起lws_write,但不了解如何为LWS_CALLBACK_SERVER_WRITEABLE阶段准备数据(然后调用lws_callback_on_writable(wsi); ..)。

为什么我写4字节时错误报告6字节?

1 个答案:

答案 0 :(得分:0)

根据documentslws_write()要求LWS_PRE字节在传递指针进行写入之前可用。

char buf[LWS_PRE + 32];                           // buffer of any size plus the LWS_PRE
lws_strncpy(&buf[LWS_PRE], "init", 4);            // use their stncpy to null-terminate
lws_write(wsi, &buf[LWS_PRE], 4, LWS_WRITE_TEXT); // write from your buffer after LWS_PRE bytes.