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
Надеюсь это поможет.