Windows сокет WSACleanup C++

Я использую сокеты в моей программе. Из-за я добавил WSAStartup, Мое приложение работает нормально (оно всегда до тех пор, пока не получит сигнал на остановку). После получения сигнала это останавливает проблему, что если я напишу WSACleanup функция в конце моей программы, он падает, и если я удаляю его, он заканчивается нормально.

Спасибо

2 ответа

Решение

Не удалось восстановить и найти проблему. Приложение использует больше, чем просто сокеты. Хотя в справочнике Microsoft говорится, что с каждым WSAStartup вы должны использовать WSACleanup, это не так, и система выпускает информацию об этом.

Это выдержка из одного из моих проектов.

Инициализация:

#if defined(WIN32)
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD(2, 0);
if (WSAStartup(wVersionRequested, &wsaData) != 0) {
  LOG("WSAStartup() error");
  return false;
}
#endif

serv_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

...

Очистка:

#if defined(WIN32)
  /* winsock requires a special function for sockets */
  shutdown(serv_socket, SD_BOTH);
  closesocket(serv_socket);
  /* clean up winsock */
  WSACleanup();  
#else
  close(serv_socket);
#endif

Надеюсь это поможет.

Другие вопросы по тегам