关闭套接字和Windows

问题描述:

GCC 4.4.4的C89 的Visual Studio VC++ 2008关闭套接字和Windows

我写一个跨平台的客户端服务器应用程序。它将在Linux和Windows上运行。

但是,我只是想知道我关闭套接字所做的事是正确的。我关闭文件描述符。但是,如果关闭它有问题。处理这个问题的最好方法是什么?也许有些数据仍在发送或接收?

非常感谢任何建议,

if(close(sockfd) == -1) 
    { 
#if defined (_WIN32) 
     fprintf(stderr, "[ %d ] [ %s ] [ %s ] [ %d ]\n", 
      WSAGetLastError(), strerror(errno), __func__, __LINE__); 
#elif(__linux__) 
    fprintf(stderr, "[ %s ] [ %s ] [ %d ]\n", strerror(errno), __func__, __LINE__); 
#endif 
    return CS_FAILURE; 
    } 
+1

Microsoft有正确的方法来干净地关闭套接字文档:http://msdn.microsoft.com/en-us/library/ms738547.aspx。你也许可以把它转换成可以在Linux上运行的东西。 – 2010-05-24 19:32:52

那么,对于一个需要在Windows上,不使用接近关闭套接字。

在处理错误,你看在可能的错误代码,并决定要处理的其中哪些:http://msdn.microsoft.com/en-us/library/ms737582(VS.85).aspx

“成功地调用WSAStartup调用使用该功能之前,必须进行”可能意味着在一个错误的应用程序,而不是您可以即时处理的事情,所以良好的日志记录是一个好主意。

+0

我忘了添加windows的closesocket。刚刚在linux上编译完成。谢谢。 – ant2009 2010-05-24 16:18:48