Windows сокет WSACleanup C ++ - PullRequest
       36

Windows сокет WSACleanup C ++

1 голос
/ 01 октября 2009

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 01 октября 2009

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

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

#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);

...

Cleanup:

#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

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

1 голос
/ 06 октября 2009

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

...