socket 的句柄屬性設置

Socket一些屬性設置記錄標記window/linux設置方法,如果沒標記則是不同系統下設置都相同。

 

udp/tcp 共有的屬性

  1. FIONBIO  設置socket是否爲阻塞非阻塞模式,默認創建的socket是阻塞模式。

設置非阻塞模式:

dwOn = true;

window:

ioctlsocket(m_hSocket, FIONBIO, &dwOn);

linux:

ioctl(m_hSocket, FIONBIO, &dwOn);

 

  1. SO_REUSEADDR 重複綁定設置

nSet = 1;

setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR, (s8*)&nSet, sizeof(s32));

 

3. SO_SNDBUF/ SO_RCVBUF

SO_RCVBUFSO_SNDBUF每個套接口都有一個發送緩衝區和一個接收緩衝區,使用這兩個套接口選項可以改變缺省緩衝區大小

setsockopt(ptSocket->m_hSocket, SOL_SOCKET, SO_RCVBUF, (s8*)&nBufferSize, sizeof(s32));

setsockopt(ptSocket->m_hSocket, SOL_SOCKET, SO_SNDBUF, (s8*)&nBufferSize, sizeof(s32));

 

tcp屬性

  1. TCP_NODELAY TCP/IP協議中針對TCP默認開啓了Nagle算法。Nagle算法通過減少需要傳輸的數據包,來優化網絡。在內核實現中,數據包的發送和接受會先做緩存,分別對應於寫緩存和讀緩存。對於關閉TCP_NODELAY,則是應用了Nagle算法。數據只有在寫緩存中累積到一定量之後,纔會被髮送出去,這樣明顯提高了網絡利用率

打開TCP_NODELAY

int nOn = true;

setsockopt(m_hSocket, IPPROTO_TCP, TCP_NODELAY, (s8*)&nOn, sizeof(s32));

 

  1. SO_KEEPALIVE tcp保活機制 同時可以設置另外三個屬性

TCP_KEEPIDLE 多少秒沒有數據開始檢查

TCP_KEEPINTVL發送檢查包的頻率單位秒

TCP_KEEPCNT  發送的次數

設置方法:

setsockopt(m_hSocket, SOL_SOCKET, SO_KEEPALIVE, (s8*)&nYes, sizeof(s32));

linux

setsockopt(m_hSocket, SOL_TCP, TCP_KEEPIDLE, (void *)&nkeepIdle, sizeof(nkeepIdle));

setsockopt(m_hSocket,SOL_TCP,TCP_KEEPINTVL,(void*)&nkeepInterval,sizeof(nkeepInterval);

setsockopt(m_hSocket, SOL_TCP, TCP_KEEPCNT, (void *)&nkeepCount, sizeof(nkeepCount));

 

udp屬性:

  1. SIO_UDP_CONNRESET 設置icmp不處理

Window

dwOn = false

ioctlsocket(m_hSocket, SIO_UDP_CONNRESET, &dwOn);

 

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