&オプションを有効にしてlibwebsockets-2.1.0を使用しています。generic sessionlwsws
ファイルを開き、コンテンツを websocket に出力する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]ましたが、それはまだ不平を言っています。
websocketの最終的なline 30-something出力には一貫性がないことを指摘したいと思います。line 400
FWIW、私が読んでいるファイルの合計行は1758行で、行の最長文字長は107文字です。
ループを削除しfgets、値を独自の汎用値に置き換えるとうまくいくようです。
ありがとう