Сокеты являются блокирующими сокетами по умолчанию, и я подозреваю, что закрывающееся приложение ожидает закрытия клиентского сокета, но, поскольку сервер уже закрыл сокет, я предполагаю, что проблема не в этом.
Есть идеи, что вызывает зависание приложения, и идеи, как это исправить?
Подключить код...
Код: Выделить всё
bool connectSocket(SOCKET &sock, const char *serverIp, const unsigned int serverPort) {
sockaddr_in serverAddress;
memset(&serverAddress, 0x00, sizeof(sockaddr_in));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = inet_addr(serverIp);
serverAddress.sin_port = htons(serverPort);
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock == INVALID_SOCKET)
return false;
if(connect(sock, (SOCKADDR*) &serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {
printf("connect socket error %u\n", WSAGetLastError());
return false;
}
}
Код: Выделить всё
void disconnectSocket(SOCKET &sock) {
if(sock != INVALID_SOCKET) {
if(closesocket(sock) == SOCKET_ERROR)
printf("close socket error %u\n", WSAGetLastError());
sock = INVALID_SOCKET;
}
}
ТИА
Подробнее здесь: https://stackoverflow.com/questions/790 ... on-to-hang