設定linux的socket的非阻塞模式

2021-06-27 22:47:00 字數 1099 閱讀 4656

設定linux的socket的非阻塞模式

int setnonblocking(int sockfd)

return 0;}

關於tcp_cork選項

tcp_cork選項與tcp_nodelay一樣,是控制nagle化的。

1、開啟tcp_nodelay選項,則意味著無論資料報是多麼的小,都立即傳送(不考慮擁塞視窗)。

2、如果將tcp連線比喻為乙個管道,那tcp_cork選項的作用就像乙個塞子。設定tcp_cork選項,就是用塞子塞住管道,而取消tcp_cork選項,就是將塞子拔掉。例如下面這段**:

當tcp_cork選項被設定時,tcp鏈結不會傳送任何的小包,即只有當資料量達到mss時,才會被傳送。當資料傳輸完成時,通常需要取消該選項,以便被塞住,但是又不夠mss大小的包能及時發出去。如果應用程式確定能一起傳送多個資料集合(例如http響應的頭和正文),建議設定tcp_cork選項,這樣在這些資料之間不存在延遲。為提公升效能及吞吐量,web server、檔案伺服器這一類一般會使用該選項。

著名的高效能web伺服器nginx,在使用sendfile模式的情況下,可以設定開啟tcp_cork選項:將nginx.conf配置檔案裡的tcp_nopush配置為on。(tcp_nopush與tcp_cork兩個選項實現功能類似,只不過nopush是bsd下的實現,而cork是linux下的實現)。另外nginx為了減少系統呼叫,追求效能極致,針對短連線(一般傳送完資料後,立即主動關閉連線,對於keep-alive的http持久連線除外),程式並不通過setsockopt呼叫取消tcp_cork選項,因為關閉連線會自動取消tcp_cork選項,將剩餘資料發出。

設定Linux支援最大的SOCKET連線數量

在linux下epoll模式預設只支援1024個連線,所以我們要修改一下linux系統可開啟的最大描述符限制。最簡單的修改方法你 可以用ulimit n 3000 把允許最大開打的描述符修改為3000,但是怎麼做,只對當前命令終端開啟的應用程式有效。要一勞永逸的,還是得修改 etc security...

設定socket的屬性

之前一直沒明白setsockopt的作用。原來是用來設定socket的屬性。setsockopt設定so reuseaddr。socket關閉之後並不會立即收回,而是要經歷乙個time wait的階段。windows下最多可以達到4分鐘。所以在這個時候對這個埠進行重新繫結就會出錯。所以需要先設定 s...

Linux的socket程式設計

linux中的socket程式設計主要是使用socket提供的api進行程式設計,包括客戶端程式設計和伺服器端程式設計,連線又包括可靠連線的tcp程式設計和不可靠連線的udp程式設計,在此提供的連線是tcp連線 源 如下 客戶端 include include include include inc...