0

&オプションを有効にして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、値を独自の汎用値に置き換えるとうまくいくようです。

ありがとう

4

1 に答える 1