gpt4 book ai didi

c - Libwebsockets 2.1.0 - 在 Libwebsockets 之外执行 lws_write 是非法的

转载 作者:行者123 更新时间:2023-11-30 16:54:05 26 4
gpt4 key购买 nike

我正在使用libwebsockets-2.1.0具有通用 session lwsws选项启用

在 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 循环并用我自己的通用值替换该值似乎工作正常。

谢谢

最佳答案

修复方法是增加 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 */ \
}

来源:libwebsocket's github issue page

关于c - Libwebsockets 2.1.0 - 在 Libwebsockets 之外执行 lws_write 是非法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40649861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com