gpt4 book ai didi

windows - 如何确定 Windows Sockets 发送缓冲区是否为空?

转载 作者:可可西里 更新时间:2023-11-01 14:15:09 25 4
gpt4 key购买 nike

我需要知道 Windows 套接字的发送缓冲区何时为空,即何时将其放入线路。 SIO_FLUSH 似乎除了杀死这个缓冲区的内容而不是等到 TCP 完成发送它之外什么都不做。

我需要它的原因是因为在手头连接上的数据全部发送(或最接近)之前,我不能开始在单独的连接上发送数据。

这似乎是一个非常奇怪的要求,散发着不良协议(protocol)的味道,但该协议(protocol)是 HTTP,并且已经通过了它的步伐:)。我需要实时将大量数据推送到浏览器,而网络延迟时间使我无法在数据进入时请求更多数据,因为这会使请求变慢,而不是仅仅基于带宽。理想的解决方案是接收 1 个实时数据流的无休止请求,但如前所述,我必须使用不支持此功能的 HTTP。我无法控制客户端的 HTTP 实现(严格来说是请求-响应)。

因此,为了优化带宽使用并尽可能接近实时数据,我需要在发送连接 2 的数据之前知道连接 1 上的缓冲区何时发送(数据是实时生成的,不应该陈旧)。

如果有人知道如何完成此操作,请告诉我。

最佳答案

在 Windows 中,无法查询发送缓冲区的状态。

如果发送方使用阻塞套接字,只要发送缓冲区有空间,套接字就会继续接受更多数据,然后当缓冲区填满时,套接字将阻塞发送代码,直到缓冲区释放一些空间。

如果发送方改用非阻塞套接字,套接字将在缓冲区填满时报告一个WSAEWOULDBLOCK错误,然后稍后的一个FD_WRITE通知将告诉发送方当发送缓冲区释放了一些空间时发送。

无论哪种方式,套接字都会通知您发生了什么,您不必查询它。

根据响应数据的性质,HTTP 1.1 Transfer-Encoding: chunked 特性,或各种 server pushing techniqus,可以在 HTTP 中用于您描述的情况类型。您的 HTTP 客户端是否支持其中任何一个是另一回事。

关于windows - 如何确定 Windows Sockets 发送缓冲区是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com