此代码段是函数的一部分,当套接字连接(或连接)时应返回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总是为零,无论块的实际结果如何。如果参数是正确的(上面的序列),尽管故障发生了故障,该块仍可正常工作(我看到套接字与netstat连接)。但是如果我调整参数,通过将重叠值更改为NULL或将套接字更改为-1,函数将返回相同的值。
答案 0 :(得分:0)
错过了问题描述中的一些上下文。套接字绑定到I / O完成端口。函数调用失败,但ConnectEx的结果是通过工作线程中的GetQueuedCompletionStatus接收的。
编辑:
我本应该打电话给WSAGetLastError()
。