TCP_NODELAY is option given to setsockopt system call:
Socket编程中,TCP_NODELAY选项是用来控制是否开启Nagle算法,该算法是为了提高较慢的广域网传输效率,减小小分组的报文个数,完整描述:
该算法要求一个TCP连接上最多只能有一个未被确认的小分组,在该小分组的确认到来之前,不能发送其他小分组。
这里的小分组指的是报文长度小于MSS(Max Segment
Size)长度的分组(MSS是在TCP握手的时候在报文选项里面进行通告的大小,主要是用来限制另一端发送数据的长度,防止IP数据包被分段,提高效率,一般是链路层的传输最大传输单元大小减去IP首部与TCP首部大小)。如果小分组的确认ACK一直没有回来,那么就可能会触发TCP超时重传的定时器。
来源
int nagle_status = 1;
int result = setsockopt(sock, //socket的文件描述符
IPPROTO_TCP,
TCP_NODELAY,
(char *) &nagle_status,
sizeof(int)); // 1 - on, 0 - off
if (result < 0){
throw std::runtime_error("Failed to change the Nagle");
}