網路編程–通訊端選項

來源:互聯網
上載者:User
基本通訊端選項

1. SO_BROADCAST

 開啟或禁止進程發送廣播訊息的能力。


2. SO_DEBUG

 開啟該選項後,核心將為TCP在該通訊端發送和接收的所有分組保留詳細跟蹤資訊。這些資訊儲存在核心的某個環型 緩衝區中


3. SO_KEEPALIVE
 如果兩小時內在該通訊端的任一方向上都沒有資料交換,TCP就自動給對端發送一個保持存活探測分節,它導致以下三種情況之一
 3.1 對端以期望的ACK響應,應用進程得不到通知,在右經過仍無動靜的2小時後,TCP將發出另一個探測分節
 3.2 對端以RST響應,它告知本端TCP,對端已崩潰且已重新啟動

 3.3 對端對保持存活探測分節沒有任何響應。


4. SO_LINGER

 本選項指定close函數對連線導向的協議如何操作。預設操作close是立即返回。但是如果有資料殘留在通訊端發送緩衝區中,系統將試著把這些資料發送給對端


linger的資料結構,在<sys/socket.h>中定義

struct linger

  int l_onoff;  //0-off nonzero-on

  int l_linger;

};

 4.1 如果l_onoff為0,那麼關閉本選項,l_lingger的值被忽略,close立即返回

 4.2 如果l_onoff為非0其l_linger為0,那麼當close某個串連時TCP將中止該串連。這就是說TCP將丟棄保留在通訊端發送緩衝取中的任何資料,並發送一個RST給對端,而沒有通常的四分組串連終止序列,這樣避免了TIME_WAIT狀態

 4.3 如果l_onoff為非0且l_linger也為非0,那麼當通訊端關閉時核心將拖延一段時間。這就是說如果在通訊端發送緩衝區中仍殘留有資料,那麼進程將被投入睡眠,知道所有資料都已發送完且均被對方確認或者延滯時間已到。


5. SO_RCVLOWAT和SO_SNDLOWAT

  每個通訊端有一個接收低水位和一個發送低水位。他們由select函數使用。接收低水位標記是讓select返回"可讀"時通訊端接收緩衝區中所需的資料量。對於,TCP,UDP,SCTP,其預設值為1。發送低水位標記是讓select返回"可寫"時通訊端發送緩衝區中所需的可用空間。對於TCP通訊端,其預設值常為2048.而UDP通訊端的發送緩衝區中可用空間的位元組數從不改變(因為UDP從不為由應用程式傳遞給他的資料報保留副本),只要一個UDP通訊端的發送緩衝區大小大於該通訊端的低水位標記,該UDP通訊端總是可寫


6 SO_RCVTIMEO和SO_SNDTIMEO
 這兩個選項允許我們給通訊端的接收和發送設定一個逾時值。發送逾時影響
write, send, sendto, sendmsg

接收逾時影響:read,recvfrom, recvmsg


7 SO_REUSERADDR和SO_REUSERPORT
 7.1 SO_REUSEADDR,允許啟動一個監聽伺服器並捆綁其眾所周知連接埠,即使以前建立的將該連接埠用作他們的本地連接埠的串連仍存在
 7.2 SO_REUSEADDR  允許在同一個連接埠上啟動同一伺服器的多個執行個體,只要每個執行個體捆綁一個不同的本地IP地址
 7.3 SO_REUSEADDR允許單個進程捆綁同一個連接埠到多個通訊端上,只要每次捆綁指定不同的本地IP地址即可
 7.4 SO_REUSEPORT選項允許完全重複的捆綁,不過只有在想要捆綁同一IP地址河段口的每個通訊端鬥志頂了本通訊端選項才行
  建議:
  1. 在所有TCP伺服器程式中,在調用bind之前設定SO_REUSRADDR通訊端選項
  2. 當編寫一個可在同一時刻在同一主機上運行多次的躲避應用程式時,設定SO_REUSRADDR通訊端選項,並將所參加多播組的地址作為本地IP地址捆綁

 8. SO_RCVBUF和SO_SNDBUF

  每個通訊端都有一個發送緩衝區和一個接收緩衝區。接收緩衝區被TCP,UDP和SCTP用來儲存接收到的資料,直到應用程式進程來讀取,大小限定為TCP通告對端的視窗大小。由於TCP有流量控制,所以接收緩衝區不可能溢出。但是UDP是沒有流量控制的,較快的發送端可以很容易的淹沒較慢的接收端,導致接收端的UDO丟棄資料報。

TCP通訊端選項

  1. TCP_MAXSEG 

 允許我們設定或擷取TCP串連的最大分節大小(MSS),傳回值是我們的TCP可以發送給對端的最大資料量

 2. TCP_NODELAY

  開啟本選項將禁止TCP的Nagle演算法,預設情況下該演算法是啟動的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.