Отключение. Повторное подключение сокета winsock2 приводит к зависанию приложения?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Отключение. Повторное подключение сокета winsock2 приводит к зависанию приложения?

Сообщение Anonymous »

У меня есть клиент-серверное приложение winsock2, которое зависает, когда клиент, который уже подключился к серверу на одном компьютере, пытается снова подключиться к серверу с другого компьютера. Логика в коде сервера обнаруживает это и без проблем отключает клиента от ранее подключенного сокета, но приложение, которое было подключено к этому сокету, понятия не имеет, что оно было отключено, и приложение зависает при попытке закрыться.
Сокеты являются блокирующими сокетами по умолчанию, и я подозреваю, что закрывающееся приложение ожидает закрытия клиентского сокета, но, поскольку сервер уже закрыл сокет, я предполагаю, что проблема не в этом.
Есть идеи, что вызывает зависание приложения, и идеи, как это исправить?
Подключить код...

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Отключение. Повторное подключение сокета winsock2 приводит к зависанию приложения?
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • LD_PRELOAD на Android приводит к зависанию приложения
    Anonymous » » в форуме Android
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Использование Ironpython из C# async-await приводит к зависанию приложения
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Запуск QPainter на QPrinter в фоновом потоке приводит к зависанию всего приложения.
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Инициализация кадра данных Polars с 15 миллионами записей приводит к зависанию машины.
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»