Я пытаюсь понять, как я должен захватить IP-адрес клиента при использовании libwebsockets в качестве сервера.libwebsockets: как сохранить IP-адрес с запросом
Из того, что я понимаю из документации, libwebsockets_get_peer_addresses
доступен только для использования в обратном вызове LWS_CALLBACK_FILTER_NETWORK_CONNECTION
, но в этот момент структура данных пользователя, по-видимому, не инициализирована, поэтому любая попытка сохранить здесь будет segfault.
Я бы ожидал, что IP-адрес будет находиться в заголовках запроса, как и на других веб-серверах, таких как Apache или nginx, но в этой библиотеке он кажется доступным только для определенной части процесса запроса и не является скопированы в заголовки.
Это то, что я пытаюсь внутри 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
инициализирован.
Любая помощь будет оценена по достоинству, потому что я считаю, что документация для библиотеки очень сложна для понимания.
Спасибо! Я знал, что должно быть что-то более разумное, чем обходной путь, который я использовал. Мне просто жаль, что у меня не было таких проблем с моей документацией ... – GMemory