为什么SNDBUF太低会破坏HTTP?

时间:2012-11-06 17:15:44

标签: http sockets networking tcp

我有一个简单的自定义HTTP服务器为客户提供服务。

将SNDBUF设置为512000一切正常。但是,将其设置为较低或将其设置为默认值(无论是什么)会导致Chrome和Firefox无法接收所有响应数据 - Firefox会在大约150000 - 250000字节后截断它(即使内容保持不变,偏移量也会每次都会更改)相同的),Chrome提供错误,没有详细信息。

有争议的特定响应大约是300000字节,并且在一个块中发送。

Rex Swain's HTTP Viewer这样的工具,curl和wget报告没有这样的问题,并显示所有数据。

为什么设置SNDBUF会影响Chrome和Firefox接收数据的能力?我理解SNDBUF如何影响性能,但我不明白如何设置它太低可能会破坏流?

1 个答案:

答案 0 :(得分:0)

您可以一次写入底层套接字的数据量受当时可用的发送缓冲区大小的限制。正如Nikolai所说,您需要检查send()或等效的返回值,以确定您在函数中传递的所有数据是否已写入发送缓冲区。如果没有,那么你需要等待套接字再次变为'可写',然后写出未完成的数据。

不同浏览器/ HTTP客户端之间截断点的差异有很多原因。一个原因可能是接收器(客户端)接收其套接字的缓冲区大小,因为大小决定了TCP拥塞窗口大小(用于流量控制),这也会影响实际传输速度。另一个可能的原因是HTTP Viewer / curl / wget可能比Chrome或Firefox读取的内容更快地读取套接字等。