我们使用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) );
以上均应用于阻塞模式下