windows - 如何暂停 IOCP TCP 套接字服务器?

标签 windows sockets tcp winsock iocp

我的程序类似于 HTTP 代理,它在一个接口(interface)上等待消息并将它们转发到另一个接口(interface)。该应用程序仅使用 IOCP,包括客户端和服务器端。有时,客户端比服务器慢(比率为 10 或 100),无法缓冲太多数据。 如何暂停已建立的 TCP 连接然后恢复它而不丢失任何消息?我试图延迟发布新的 recv IOCP 事件,但一些消息丢失了。 C++/Windows 7+

最佳答案

I tried to delay the post of a new recv IOCP event

这实际上应该可以解决问题。然后,您的服务器端 TCP 连接的接收缓冲区将填满您的套接字上设置的接收缓冲区大小,此时套接字将推回该套接字的发送端,这 - 通过标准方式 TCP flow control - 简单地停止发送更多数据包,直到接收方发出信号已处理更多消息。

现在这取决于发送方在断开连接之前要等待多长时间(超时)。

"some messages are lost"

只有当您断开连接时,TCP 才会发生这种情况,发送方和接收方都会注意到这一点。所以数据不会简单地丢失。这取决于您在 TCP 之上的网络协议(protocol),尽管发送方应用程序是否可以知道接收方应用程序(在本例中为您的代理)成功处理了多少消息。

关于windows - 如何暂停 IOCP TCP 套接字服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32669085/

相关文章:

c++ - 仅在 Qt 5.5 中与 RegisterDeviceNotification 链接错误

linux - AllJoyn Router 是否支持发现在有线本地网络上运行的远程服务

java - 收到不完整的 UDP 数据包

security - 签名的小程序可以与它们所源自的不同主机连接吗?

java - 多个数据输入/输出流混淆

c - 在 C 中立即(逐个数据包)从套接字接收 TCP 有效负载

c++ - StrRetToBuf 函数的链接器错误

windows - AWS ec2 windows 登录错误说发生了身份验证错误。无法联系本地安全机构

c - 在不关闭套接字的情况下停止阻塞接收

c - 网络层 libpcap 的数据包重组