大家都知道:
Winsock使用了一个算法(不知道是什么),使得用同一个Socket,在数据包很小的情况下,在很短时间内连续send(例如:两个紧挨着的send函数)多次,它会把多个数据包合并成一个数据包然后发出去,这样你可能发了2个数据包,但只收到了1个数据急。请问,如何才能保证发送的和收到的数据包数目不变,或怎样才能让它不合并数据包,100分相赠,谢谢。
Winsock使用了一个算法(不知道是什么),使得用同一个Socket,在数据包很小的情况下,在很短时间内连续send(例如:两个紧挨着的send函数)多次,它会把多个数据包合并成一个数据包然后发出去,这样你可能发了2个数据包,但只收到了1个数据急。请问,如何才能保证发送的和收到的数据包数目不变,或怎样才能让它不合并数据包,100分相赠,谢谢。
你可以使用setsockopt(TCP_NODELAY)来强制发送(send函数直接拼包发送,不把多个包合并),但接收端如果稍慢的话,接收端仍然会将多个包合并之后返回给应用层的。所以,除了速度慢点之外,没有什么优点
设置TCP_NODELAY禁止Nagle算法。
设置TCP_NODELAY禁止Nagle算法。