关闭套接字和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;
}
答
那么,对于一个需要在Windows上,不使用接近关闭套接字。
在处理错误,你看在可能的错误代码,并决定要处理的其中哪些:http://msdn.microsoft.com/en-us/library/ms737582(VS.85).aspx
“成功地调用WSAStartup调用使用该功能之前,必须进行”可能意味着在一个错误的应用程序,而不是您可以即时处理的事情,所以良好的日志记录是一个好主意。
+0
我忘了添加windows的closesocket。刚刚在linux上编译完成。谢谢。 – ant2009 2010-05-24 16:18:48
Microsoft有正确的方法来干净地关闭套接字文档:http://msdn.microsoft.com/en-us/library/ms738547.aspx。你也许可以把它转换成可以在Linux上运行的东西。 – 2010-05-24 19:32:52