我正在使用libwebsockets-2.1.0并启用了generic session
&lwsws
选项。
在case LWS_CALLBACK_SERVER_WRITEABLE
我有一些代码可以打开一个文件,并将内容输出到 websocket。
static const char* filename = "/tmp/loop.log";
#define MAX_STAT_LINE_LENGTH 256
unsigned char buf[LWS_PRE + 512];
unsigned char *p = &buf[LWS_PRE];
char line[MAX_STAT_LINE_LENGTH];
while ( fgets(line, sizeof(line), fp) != NULL) {
int n = lws_snprintf((char *)p, sizeof(line), "%s", line);
int m = lws_write(wsi, p, n, LWS_WRITE_TEXT);
if (m < n) {
printf("websocket write failed\n");
}
}
在终端中,我得到了一堆这些:
lwsws[13778]: ****** 0x9230a50: Sending new 46 (/name?ag=z&abcd=011), pending truncated ...
It's illegal to do an lws_write outside of the writable callback: fix your code
这个错误有解释吗?我的意思是,我已经宣布char line[1000]
,但它仍在抱怨。
需要指出的是,websocket的最终输出是不一致的,有时停在line 30-something
,有时停在line 400
FWIW,我正在阅读的文件的总行是1758行,一行的最长字符长度是107 个字符。
删除fgets
循环并用我自己的通用值替换该值似乎工作正常。
谢谢