2

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

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

有问题的特定响应大约是 300000 字节,并且全部在一个块中发送。

Rex Swain 的 HTTP 查看器、curl 和 wget 等工具不会报告此类问题,并显示所有数据。

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

4

1 回答 1

0

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

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

于 2012-11-21T03:25:36.503 回答