我正在嘗試創建輔助函式來設定 tcp 套接字的保持活動狀態。該setsockopt函式接受一個指向值的指標。我的問題是,該值必須在套接字的整個生命周期內保持有效還是僅在執行此函式時才有效?
這是我使用的示例: https ://github.com/espressif/esp-idf/blob/ac315adc2c76309b8b9c82e166f03891ad2031bb/examples/protocols/sockets/tcp_server/main/tcp_server.c
為了澄清我的問題,以下哪個示例是正確的?
示例 1:
void SetKeepAlive(int handle, int enable, int idle, int interval, int count)
{
// Set tcp keepalive option
setsockopt(handle, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(int));
setsockopt(handle, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(int));
setsockopt(handle, IPPROTO_TCP, TCP_KEEPINTVL, &interval, sizeof(int));
setsockopt(handle, IPPROTO_TCP, TCP_KEEPCNT, &count, sizeof(int));
}
示例 2:
int _enable;
int _idle;
int _interval;
int _count;
void SetKeepAlive2(int handle, int enable, int idle, int interval, int count)
{
_enable = enable;
_idle = idle;
_interval = interval;
_count = count;
// Set tcp keepalive option
setsockopt(handle, SOL_SOCKET, SO_KEEPALIVE, &_enable, sizeof(int));
setsockopt(handle, IPPROTO_TCP, TCP_KEEPIDLE, &_idle, sizeof(int));
setsockopt(handle, IPPROTO_TCP, TCP_KEEPINTVL, &_interval, sizeof(int));
setsockopt(handle, IPPROTO_TCP, TCP_KEEPCNT, &_count, sizeof(int));
}
uj5u.com熱心網友回復:
引數 tosetsockopt預計不會永遠存在,而是會被呼叫復制。
但是請注意,這可能不會擴展到套接字選項可能指向的任何內容(盡管我發現的唯一情況(SO_ATTACH_FILTER/ SO_ATTACH_REUSEPORT_CBPF)確實復制了內部指向的物件,并且可以合理地預期大多數類似情況的行為相同)。
我通常希望任何需要延長生命周期的東西都被記錄下來。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/515924.html
標籤:C指针变量套索选择
