Я использую libwebsockets-2.1.0 с параметрами generic session
и lwsws
включено.
В case LWS_CALLBACK_SERVER_WRITEABLE
у меня есть код, который открывает файл и выводит содержимое в веб-сокет.
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]
, но он все еще жалуется.
Я хотел бы отметить, что окончательный вывод веб-сокета непостоянен, иногда он останавливается на line 30-something
, иногда останавливается на line 400
FWIW, общая строка файла, который я читаю, составляет 1758 строк, при этом максимальная длина строки составляет 107 символов.
Удаление цикла fgets
и замена значения моим собственным общим значением работает нормально.
Спасибо