2009-10-01 47 views
0

我在我的程序中使用套接字。由于我添加了WSAStartup。 我的应用程序运行正常(它总是一直运行直到它停止信号)。 得到信号后,它停止了问题,如果我在我的程序结束时编写WSACleanup函数,它会崩溃,如果我删除它会终止罚款。Windows套接字WSACleanup C++

谢谢

回答

1

无法解决问题并找到问题。应用程序使用的不仅仅是套接字。尽管微软引用了一个WSAStartup你必须使用WSACleanup,但事实并非如此,系统正在发布一些事情。

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 

希望这有助于。

+0

试过了,这不是问题。 我不使用directlry套接字,而是使用套接字上的选择。 – 2009-10-02 07:01:10

+0

我没有看到任何问题。如果在Win上,你需要调用WSACleanup。顺便说一句,你使用线程? – 2009-10-02 08:15:34

+1

此外,我发现了很好的Windows套接字API参考 - http://www.sockets.com/winsock.htm#Cleanup。 – 2009-10-02 08:16:27