Tcp send阻塞問題

2021-10-08 05:17:36 字數 771 閱讀 5102

如果傳送快取大小比請求傳送的大小要大,那麼send函式立即返回,同時向網路中傳送資料;否則,send會等待接收端對之前傳送資料的確認,以便騰出快取空間容納新的待傳送資料

參考鏈結

步驟:1)修改接收端,傳送端的系統緩衝區大小

echo 10000000 > /proc/sys/net/core/wmem_max

echo 10000000 > /proc/sys/net/core/rmem_max

2)設定socket buffer的大小

接收端**(傳送端也是類似,我這裡設定了20m)

int nrecvbuf=20000000;

ret = setsockopt(socket_fd_g,sol_socket,so_sndbuf,(const char*)&nrecvbuf,sizeof(int));

if(ret <0)

ret = setsockopt(socket_fd_g,sol_socket,so_rcvbuf,(const char*)&nrecvbuf,sizeof(int));

if(ret <0)

socklen_t size = sizeof(nrecvbuf);

ret = getsockopt(socket_fd_g, sol_socket, so_rcvbuf, &nrecvbuf, &size);

sample_prt("getsockopt so_rcvbuf is %d\n", nrecvbuf);

TCP send 阻塞與非阻塞

原文連線 tcp協議本身是可靠的,並不等於應用程式用tcp傳送資料就一定是可靠的.不管是否阻塞,send傳送的大小,並不代表對端recv到多少的資料.在阻塞模式 下,send函式的過程是將應用程式請求傳送的資料拷貝到傳送快取中傳送就返回.但由於傳送快取的存在,表現為 如果傳送快取大小比請求傳送的大小...

TCP send函式會阻塞嗎?

很多學員在使用send函式的時候,發現send總是能正常返回,看起來好像是 非阻塞 其實它是阻塞的,以下 為證 服務端 include include pragma comment lib,ws2 32.lib int main int ret recv c,szrecvbuf,sizeof szr...

訊號阻塞問題

今天在看 深入理解計算機系統 第8章的內容時,對於圖8 31的 有一些疑惑.為什麼會是阻塞第二個訊號,自己在ubuntu14.04 核心為linux3.13.0 24 上敲了一遍 include include include include include include includevoid ...