gpt4 book ai didi

c++ - GetQueuedCompletionStatus 延迟

转载 作者:行者123 更新时间:2023-11-28 08:21:02 25 4
gpt4 key购买 nike

我编写了基于 iocp 机制管理网络通信的复杂库。问题是,当服务器通过调用 API 方法 closesocket() 关闭连接时,此信息有时会延迟几秒甚至几分钟传输到客户端。我用于检测连接关闭的代码如下所示(已简化):

ok = GetQueuedCompletionStatus(completion_port, &io_size, (PULONG_PTR)&context, &overlapped, 40);

if (!ok) {
// something went broken
DWORD err = GetLastError();
if (err == ERROR_CONNECTION_REFUSED) {
// connection failed
} else if (err == ERROR_SEM_TIMEOUT) {
// connection timeout
} else if (err == ERROR_NETNAME_DELETED) {
// connection closure - point of interest
} else if (err != WAIT_TIMEOUT) {
// unknown error
}
} else {
// process incomming or outgoing data
}

为什么会这样?我需要立即了解连接关闭,以便能够连接到备份服务器(负载不是那么重 - 因此正在发生断开连接)。

最佳答案

你是如何关闭连接的?

如果您只是调用 closesocket(),那么您正在启动一个关闭序列,该序列将尝试确保当前未决的所有数据都将到达目的地。这可能需要一些时间,尤其是在网络连接过载、数据报丢失和 TCP 重新传输发生的情况下。

如果您想立即关闭连接并丢失任何未决数据,请将 linger 设置为 0,然后关闭套接字。这将在连接上发出 RST,你会更快。

关于c++ - GetQueuedCompletionStatus 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5830699/

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