Socket 函式選項

2021-06-07 09:27:46 字數 2611 閱讀 2722

1、tcp_nodelay:表示立即傳送資料。

2、so_resuseaddr:表示允許重用socket所繫結的本地位址

3、so_timeout:表示接受資料時的超時時間。

4、so_linger:表示當執行close();方法時候,是否理解關閉底層的socket。

5、so_snfbuf:表示傳送資料的緩衝大小

6、so_rcvbuf:表示接受資料的緩衝區的大小

7、so_keepalive:表示長時間處於空閒狀態的socekt,是否自動把他/她關閉

8、oobinline:表示是否支援傳送乙個位元組的tcp緊急資料

1、tcp_nodelay選項:

settcpnodelay(boolean on);

預設情況下傳送資料是採用negale演算法。negale演算法是指傳送方資料不會立刻傳送出去,而是先放在緩衝區內,等待緩衝區滿了,在發出去。negale演算法適用於需要傳送大量資料的應用場景。這種演算法減少傳輸的次數增加效能。但是如果對於需要即使響應的,小批量資料的應用場景,例如網路遊戲就不能採用negale演算法了。預設是false,表示採用negale演算法。

2、so_resuseaddr選項:

setresuseaddress(boolean on);

當接收方通過socket的close()方法關閉socket的時候,如果網路還在傳送資料,那麼底層的socket不會立即釋放本地的埠的,而是等一段時間,確定保證接收到了網路上的延遲資料,然後在釋放埠。確保正好不被同樣的socket占用這個埠號。

3、so_timeout選項:

setsotimeout(int milins);

用於設定接受資料的等待的超時時間,單位為毫秒,它的預設值是0,表示無限等待。

4、so_linger選項

setsolinger(boolean on ,int seconds);

預設情況socket的close();方法會立即返回。但是底層的socket並沒有立即關閉,他會延遲一段時間,等傳送完畢了再關閉。如果執行:

setsolinger(true,0)的話,會立即關閉,底層的socket也會立即關閉,丟切剩餘的資料。如果setsolinger(true,3600);會在兩種情況關閉,第一:資料傳送完畢,第二:就是阻塞了3600秒。

5、so_rcvbuf選項

setreceivebuffersize(int size);

用於設定輸入資料的緩衝區的大小。傳輸較大的可以使用較大的緩衝區(例如:http,ftp),例如網路遊戲實時性較高的,且頻繁互動的使用較小的緩衝區。

6、so_sndbuf選項

setsendbuffersize(int size);

用於設定輸出緩衝區的大小。

7、so_keepalive選項

setkeepalive(boolean on);

當設定為true的時候,tcp會實現監控連線是否有效,當連線處於空閒狀態的時候,超過了2個小時,本地的tcp實現會傳送乙個資料報給遠端的socket,如果遠端沒有發回響應,tcp會持續嘗試11分鐘,知道響應為止,如果在12分鐘的時候還沒響應,tcp嘗試關閉socket連線。

8、oobinline選項

setoobinline(boolean on);

當設定為true的時候,表示支援緊急資料。接收方需要對緊急資料做進一步的處理。使用更高的協議。

對於socket服務型別的選擇:

ip規定了4中服務型別:

1、低成本:傳送成本低

2、高可靠性:保證鮑資料可靠的傳送到目的地

3、高吞吐量:一次接受傳送大量資料

4、最小延遲:傳輸資料快,最快傳送到目的地

設定服務型別:settrafficclass(int trafficclass);

底成本:0x02

高可靠:0x04

最高吞吐量:0x08

最小延遲:0x10

關於socket的設定選項總結完畢!

再來乙個例項的封裝的方法:

private void setsocketparameters(socket client_sock) throws socketexception catch (illegalargumentexception ex)

try catch (illegalargumentexception ex)

// 當設定為true的時候,tcp會實現監控連線是否有效,當連線處於空閒狀態的時候,

//超過了2個小時,本地的tcp實現會傳送乙個資料報給遠端的socket,如果遠端沒有發回響應,

//tcp會持續嘗試11分鐘,知道響應為止,如果在12分鐘的時候還沒響應,tcp嘗試關閉socket連線

client_sock.setkeepalive(true);

//採用negal演算法,有資料立即傳送出去

client_sock.settcpnodelay(tcp_nodelay);

if (linger > 0)

//關閉socket等待liner毫秒後在關閉,

client_sock.setsolinger(true, linger);

else

//直到把快取底層資料傳送完畢再關閉socekt連線

client_sock.setsolinger(false, -1);

}

socket可選項程式設計

套接字有多種可選項,有時候是需要更改套接字可選項的,下面是一部分套接字可選項 套接字可選項是分層的。ipproto ip層可選項是ip協議相關事項,ipproto tcp層可選項是tcp協議相關事項,sol socket層是套接字相關的通用可選項。下面是讀取和設定可選項的函式 includeint ...

Socket描述符選項 SOL SOCKET

socket描述符選項 sol socket include int setsockopt int socket,int level,int option name,const void option value,size t option len 第乙個引數socket是套接字描述符。第二個引數l...

socket描述符選項 SOL SOCKET

include int setsockopt int socket,int level,int option name,const void option value,size t option len 第乙個引數socket是套接字描述符。第二個引數level是被設定的選項的級別,如果想要在套接字...