/*....*/
if (getaddrinfo(_ip, _port, &hints, &server) != 0)
{
WSACleanup();
return false;
}
if ((s = socket(server->ai_family, server->ai_socktype, server->ai_protocol)) == INVALID_SOCKET)
{
freeaddrinfo(server);
WSACleanup();
return false;
}
if (connect(s, server->ai_addr, server->ai_addrlen) == SOCKET_ERROR)
{
freeaddrinfo(server);
closesocket(s);
WSACleanup();
return false;
}
freeaddrinfo(server);
/*....*/
ICAgIC8qLi4uLiovCiAgICAKICAgIGlmIChnZXRhZGRyaW5mbyhfaXAsIF9wb3J0LCAmaGludHMsICZzZXJ2ZXIpICE9IDApCiAgICB7CiAgICAgICAgV1NBQ2xlYW51cCgpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoKHMgPSBzb2NrZXQoc2VydmVyLT5haV9mYW1pbHksIHNlcnZlci0+YWlfc29ja3R5cGUsIHNlcnZlci0+YWlfcHJvdG9jb2wpKSA9PSBJTlZBTElEX1NPQ0tFVCkKICAgIHsKICAgICAgICBmcmVlYWRkcmluZm8oc2VydmVyKTsKICAgICAgICBXU0FDbGVhbnVwKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChjb25uZWN0KHMsIHNlcnZlci0+YWlfYWRkciwgc2VydmVyLT5haV9hZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpCiAgICB7CiAgICAgICAgZnJlZWFkZHJpbmZvKHNlcnZlcik7CiAgICAgICAgY2xvc2Vzb2NrZXQocyk7CiAgICAgICAgV1NBQ2xlYW51cCgpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgZnJlZWFkZHJpbmZvKHNlcnZlcik7CiAgICAKICAgIC8qLi4uLiov