SO_LINGER:當TCP連接的一段主動close()連接時,一般情況下,系統會馬上返回,但是當有數據殘留在發送緩衝區時,系統會現將這些數據發送出去再返回,這樣可以優雅地關閉掉連接。這就可能使close()阻塞在系統調用中。
這種情況下,我們可以使用套接字選項SO_LINGER來改變這種默認設置。該選項會在用戶空間與內核間傳遞如下結構體:
struct linger{
int l_onoff; //on:打開緩衝發送的開關,允許系統將殘留在發送緩衝區中的數據發送出去
int l_linger; //允許的阻塞時間(即允許系統將殘留在發送緩衝區中的數據發送出去的最大等待時間,時間一到,無論如何都會關閉套接字的一端)
}
SO_REUSEADDR: 有四個不同的功能
1、在一個服務端口被子進程佔用的情況下,允許重啓服務,並且在父進程中再次綁定(bind函數)端口成功
2、允許在同一個端口啓動同一個服務的多個實例。前提是bing的IP地址不同。