代码之家  ›  专栏  ›  技术社区  ›  Poni

如何使用I/O完成端口处理重叠I/O的部分写入完成

  •  2
  • Poni  · 技术社区  · 14 年前

    在Windows I/O完成端口上,假设我执行以下操作:

    void function()
    {
        WSASend("1111"); // A
        WSASend("2222"); // B
        WSASend("3333"); // C
    }
    

    如果我得到了一个“write complete”,表示发送了3个字节的WSASend()a,是否有可能在这之后我得到一个“write complete”,它告诉我B&的部分或全部;是发送了C,还是TCP将保留它们,直到我用a的其余数据重新发出WSASend()调用?或者TCP会自动完成吗?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Len Holgate    14 年前

    我已经用IOCP开发客户端和服务器系统超过10年了,在正常使用中我从未见过部分写入完成。你可以得到他们,但如果你这样做的机会是你的服务器是软管无论如何;您可能会得到一个ENOBUFS错误的写入完成,这意味着您耗尽了非分页池或超出了锁定页的限制。

    我认为你应该管理你的资源,这样你就永远不会达到这些操作系统的限制。

    如果您知道在该连接上没有更多的写操作挂起,那么您可以发出另一个写操作来写入后续数据。