阻塞socket 立即接收

我们使用TCP协议传输时会遇到这样一个问题:

我们将数据send时,如果发送数据量较小,接收端不会立即recv。

出现这个问题的原因是TCP协议传输采用了Nagle算法,Nagle算法目标是希望每次传输都是满负荷,也就是说它尽量让发送缓冲区达到最大负荷再实际传输。

但是实际我们可能希望马上响应,那么我们就要自己找下解决方案。

方案一:

//禁用Nagle算法。 bool chOpt=true; int nErr=setsockopt( m_socket, IPPROTO_TCP, TCP_NODELAY, &chOpt, sizeof(chOpt));  

   

方案二:

//自己定制缓冲区大小。 int optVal = 1024 ; int err=setsockopt(socket, SOL_SOCKET,SO_RCVBUF,(char*)&optVal,sizeof(int) ); 

以上均应用于阻塞模式下

你可能感兴趣的:(阻塞socket 立即接收)