Я использую libwebsockets-2.1.0 с generic session
& lwsws
вариант включен.Libwebsockets 2.1.0 - это незаконно, чтобы сделать lws_write вне
В 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, общая строка файла Я читал это линии с длинной длиной символа линии символов.
Удаление цикла fgets
и замена значения на мое собственное общее значение, похоже, работают нормально.
Благодаря
Вы должны добавить объявление о ваших переменных – Mansuro
насчет WSI? – Mansuro
@Mansuro Я считаю, что WSI является структурой из LWS, в функции она объявлена как: статического Int callback_stats_streamer (структура LWS * ВИС перечислений lws_callback_reasons причина ничтожного * пользователь, аннулируются * в, size_t LEN) { // мои коды здесь } Я надеюсь, что это помогло. – d30jeff