libwebsockets をサーバーとして使用するときに、クライアントの IP アドレスを取得する方法を理解するのに苦労しています。
ドキュメントについて私が理解していることからlibwebsockets_get_peer_addresses、コールバックでのみ使用できますLWS_CALLBACK_FILTER_NETWORK_CONNECTIONが、その時点でユーザーデータ構造体は初期化されていないように見えるため、ここに保存しようとするとセグメンテーション違反が発生します。
Apache や nginx などの他の Web サーバーと同様に、IP アドレスが要求ヘッダーにあると予想していましたが、このライブラリでは、要求プロセスの特定の部分でのみ使用できるようで、ヘッダーにコピーされません。 .
これは私がLWS_CALLBACK_FILTER_NETWORK_CONNECTION内で試みていることです:
char client_name [IP_SIZE];
char client_ip [IP_SIZE];
libwebsockets_get_peer_addresses(context, wsi, (int)(long)in,
client_name, sizeof(client_name),
client_ip, sizeof(client_ip));
strncpy(pss->ip, client_ip, sizeof(client_ip)); // segfault
strncpy別のコールバック ( ) の内部をテストしたLWS_CALLBACK_HTTPので、それが初期化されたときに機能するはずです。pss
ライブラリのドキュメントを理解するのは非常に難しいと思うので、助けていただければ幸いです。