1

我在我的程序上使用套接字。由于我添加了WSAStartup. 我的应用程序运行良好(一直到收到停止信号为止)。收到信号后,它停止了一个问题,即如果我WSACleanup在程序末尾编写函数,它会崩溃,如果我删除它,它会正常终止。

谢谢

4

2 回答 2

3

这是我的一个项目的节选。

初始化:

#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

希望这可以帮助。

于 2009-10-01T15:06:17.883 回答
2

无法解决并找到问题。应用程序使用的不仅仅是套接字。虽然微软参考说每次 WSAStartup 都必须使用 WSACleanup,但这不是真的,系统正在发布关于此的内容。

于 2009-10-05T22:09:32.600 回答