这个片段是一个函数的一部分,当套接字连接(或连接)时应该返回 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,函数返回相同的值。