我正在使用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字节?
答案 0 :(得分:0)
根据documents,lws_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.