gpt4 book ai didi

runtime-error - ConnectEx 返回 false 并且 WSAGetLastError 返回 0

转载 作者:行者123 更新时间:2023-12-03 09:08:03 25 4
gpt4 key购买 nike

这个片段是一个函数的一部分,当套接字连接(或连接)时应该返回 true,如果有任何失败则返回 false。

    if(bind(socket_, reinterpret_cast<sockaddr*>(&any), sizeof any) < 0)
{
DWORD err = GetLastError();
logger() << "bind: " << ErrorMessage(err) << std::endl;
return false;
}

rc = ConnectEx(socket_,
reinterpret_cast<sockaddr*>(&addr_),
sizeof addr_,
NULL, 0, NULL,
&connectOv_.ov);
if(rc)
{
setsockopt(socket_, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0);
return true;
}
DWORD err = GetLastError();
if(err == WSA_IO_PENDING)
{
return true;
}
logger() << "connect: " << ErrorMessage(rc) << std::endl;
return false;

我不明白为什么 rc 和 err 总是为零,无论 block 的实际结果如何。如果参数正确(上面的顺序),尽管指示失败(我看到套接字与 netstat 连接),此 block 仍然有效。但是,如果我调整参数,通过将重叠更改为 NULL 或将套接字更改为 -1,这些函数将返回相同的值。

最佳答案

在问题描述中遗漏了一些上下文。套接字绑定(bind)到 I/O 完成端口。函数调用失败,但通过工作线程中的 GetQueuedCompletionStatus 接收到 ConnectEx 的结果。

编辑:
我应该调用 WSAGetLastError()反而。

关于runtime-error - ConnectEx 返回 false 并且 WSAGetLastError 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791142/

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