【问题标题】:IOCP server and send data with single wsasendIOCP 服务器并使用单个 wsasend 发送数据
【发布时间】:2013-12-22 12:10:55
【问题描述】:

我在 Windows 中使用 IOCP 服务器。我必须将缓冲区发送到所有连接的套接字。 缓冲区大小很小 - 最多 10 个字节。当我在 GetQueuedCompletionStatus 中收到每个 wsasend 的通知时,是否保证缓冲区是由单个 wsasend 一次性发送的?或者我应该添加额外的代码,检查是否发送了所有 10 个字节,并在必要时发布另一个 wsasend?

【问题讨论】:

    标签: buffer iocp


    【解决方案1】:

    无法保证,但小于单个操作系统页面大小的发送极不可能部分失败。

    如果您发送的缓冲区长度超过单个操作系统页面大小,并且如果您没有主动管理您有多少未完成的操作以及您的系统在用完之前可以支持多少操作,则失败的可能性更大“非分页池”或点击“I/O page lock limit

    只有当您在该连接上没有任何其他待处理的发送时,才有可能从部分故障中恢复。

    我倾向于检查完成处理程序中的值是否符合预期,如果不是,则中止与 RST 的连接。我从来没有在生产环境中执行过这段代码,而且我已经构建了许多不同类型的基于 IOCP 的客户端和服务器系统超过 10 年了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2015-04-26
      • 1970-01-01
      • 2019-10-24
      • 2012-11-29
      • 2014-01-31
      相关资源
      最近更新 更多