TCP数据在发送方和接收方都进行缓冲.接收器的套接字接收缓冲区的大小决定了在没有确认的情况下可以传输多少数据,并且发送方的发送缓冲区的大小决定了在发送方阻塞或获取EAGAIN/EWOULDBLOCK之前可以发送多少数据,具体取决于阻塞/非阻止阻止模式.您可以将这些套接字缓冲区设置为最大2 ^ 32-1字节,但如果将客户端接收缓冲区设置为高于2 ^ 16-1,则必须在连接套接字之前执行此操作,以便TCP窗口缩放可以在连接握手中进行协商,以便高16位可以起作用.[服务器接收缓冲区在这里不相关,但是如果你设置它> = 64k你需要在侦听套接字上设置它,它将被接受的套接字继承,再次使握手可以协商窗口缩放.]
但是我完全赞同马丁詹姆斯这是一个愚蠢的要求.它浪费了一个线程,一个线程堆栈,一个套接字,一个大型套接字发送缓冲区,一个FD,以及服务器上所有其他相关资源两个小时,并可能影响其他线程,从而影响其他客户端.它还错误地给服务器一个接收到两小时数据的印象,当它实际上只被传输到接收缓冲区时,这可能导致恢复情况中的未知复杂性:例如,服务器可能无法重建到目前为止发送的数据.在您准备好开始接收数据之前,最好不要连接,或者在客户端读取并将数据假脱机到以后进行处理.