TCP網絡編程(拓展篇)

這篇主要是對我前一篇SOCKET網絡編程的拓展。其實再認真看一下,那篇算是我博客裏面比較好的。

補充1:

sockaddr和sockaddr_in的抉擇:
前者是通用的套接字結構體,它可以在不同的協議族之間進行強轉。
後者是以太網中採用的套接字結構體,因爲前面那個不好用。

由於兩個結構體的大小一致,所以進行地址結構設置的時候,通常的方法是使用後者進行配置,然後強制轉換爲前者的結構體類型,這樣不會有任何副作用。

補充2:

以太網中建議使用PF_INET這個域。在程序設計時會發現有的代碼使用的是AF_INET,在頭文件中這兩個值是一致的,我也經常寫AF_INET,不過還是有細微的差別,PF_INET有些協議類型是AF_INET所沒有實現的

補充3:
···
struct sockaddr_in myaddr;

···

bzero(&(my_addr.sin_zero),8);

···

//我個人覺得挺細節的,把預留空間清空
補充4:

函數listen用來初始化服務器可連接隊列。
服務器處理客戶端連接時是順序處理的,同一時間只能處理一個客戶端連接。
當多個客戶端的連接請求同時到來的時候,服務器將不能處理的客戶端連接請求放入到等待隊列中,這個隊列的長度由listen()函數來指定。

大多數系統的設置爲20,其實真的沒必要太多,真的。

根據系統的可承受負載和程序的需求來確定。
系統有一個最大偵聽隊列數,一般是128(somaxconn),可以調優。

補充5:

關閉套接字函數不止一個close,還有shutdown。

int shutdown(int sock,int how);
//該函數用於關閉雙向連接的一部分。
/*
how:
SHUT_RD:值爲0,表示切斷讀
SHUT_WR:值爲1,表示切斷寫
SHUT_RDWR:值爲2,和close功能相同
*/

shutdown和close的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章