作者:GZNU_DING杰 | 来源:互联网 | 2023-05-17 12:29
redhat6.0,用哪个函数,如何设置,可以使得send函数每次都把缓冲区中的数据全部发出去?
谢谢。
9 个解决方案
试试禁用nagle算法,采用TCP_NODELAY选项?
不可能。这是由tcp协议栈来控制的。tcp有窗口滑动机制,必须得保证对端的接收速度跟得上发送的速度,如果跟不上,发送端就会暂时阻止发送。
楼主是不希望TCP分段发数据吗?
每次TCP发送的值跟服务器和客户端建立连接时,双方协商的最小MSS即TCP能发送的最大segment大小,可通过设置TCP_MAXSEG选项更改,服务端和客户端都要设置,然后双方send 的BUFF都小于设置的值,就不会被分段而会都全部发出去
找到一个答案:setsockopt,使用TCP_NODELAY选项,使得只要缓冲区有数据,就立刻发送。
学习了,TCP的传送机制好像讲开发的书都讲得不多。