этот фрагмент является частью функции, которая должна возвращать 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, функции вернут те же значения.