首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibwebSockets2.1.0-在

LibwebSockets2.1.0-在
EN

Stack Overflow用户
提问于 2016-11-17 08:24:46
回答 1查看 1K关注 0票数 0

我使用libwebsockets-2.1.0generic session & lwsws选项支持的

case LWS_CALLBACK_SERVER_WRITEABLE中,我得到了一些打开文件并将内容输出到websocket的代码。

代码语言:javascript
复制
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");
    }
}

在终点站,我得到了一堆这样的东西:

代码语言:javascript
复制
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循环并用我自己的泛型值替换这个值似乎很好。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-11-17 09:49:00

修复方法是增加rx buf大小。

代码语言:javascript
复制
#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 */ \
}

来源:libwebsocket的github问题页面

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40649861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档