gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:37:50 25 4
gpt4 key购买 nike

在 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会自动完成?

最佳答案

我使用 IOCP 开发客户端和服务器系统已有 10 多年了,在正常使用中我从未见过部分写入完成。你可以得到它们,但如果你这样做了,那么你的服务器很可能无论如何都被淹没了;您可能会收到带有 ENOBUFS 错误的写入完成,这往往意味着您已经耗尽了非分页池或超出了锁定页面限制。

恕我直言,您应该管理您的资源,以便您永远不会达到这些操作系统限制。

如果写入完成返回的字节数少于您认为应该写入的字节数,那么如果您有更多的写入待处理,您实际上无能为力。在您问题的示例中,如果 A 失败,那么您只能真正关闭连接,因为 B 和 C 可能会成功。实际上,您不必担心更多。

如果您知道该连接上没有更多待处理的写入,那么您可以发出另一次写入以写入后续数据。

而 TCP 根本不参与其中。

关于tcp - 如何使用 I/O 完成端口处理来自重叠 I/O 的部分写入完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041624/

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