我使用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循环并用我自己的泛型值替换这个值似乎很好。
谢谢
发布于 2016-11-17 09:49:00
修复方法是增加rx buf大小。
#define LWS_PLUGIN_PROTOCOL_DUMB_INCREMENT \
{
"protocol_dumb_increment", \
callback_dumb_increment, \
sizeof(struct per_session_data__dumb_increment), \
4000, /* rx buf size must be >= permessage-deflate rx size */ \
}https://stackoverflow.com/questions/40649861
复制相似问题