當我使用libwebsockets作爲服務器時,我很難理解如何捕獲客戶端IP地址。libwebsockets:如何使用請求存儲IP地址
根據我對文檔的瞭解,libwebsockets_get_peer_addresses
僅適用於LWS_CALLBACK_FILTER_NETWORK_CONNECTION
回調,但此時用戶數據結構看起來並未初始化,因此任何在此存儲的嘗試都會出現segfault。
我本來希望IP地址在請求頭中,就像Apache或nginx等其他Web服務器一樣,但是在這個庫中它似乎只對請求過程的某個部分可用,而不是複製到標題中。
這就是我試圖內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
我測試過的另一個回調(LWS_CALLBACK_HTTP
)內strncpy
,所以我知道它應該工作時pss
已初始化。
任何幫助將不勝感激,因爲我覺得圖書館的文檔很難理解。
由於連接!我知道必須有比我一直使用的解決方法更加理智的事情。我只是希望我沒有這樣的麻煩讓我的頭文件... – GMemory 2015-04-08 14:24:29