C 关闭linux和windows上的套接字
通用条款4.4.4 c89 Visual Studio VC++2008 我正在编写一个跨平台的客户机-服务器应用程序。它将在linux和windows上运行 然而,我只是想知道我所做的关闭插座是正确的。我关闭文件描述符。但是,如果关闭它有问题。最好的处理方法是什么。可能仍在发送或接收某些数据 非常感谢你的建议C 关闭linux和windows上的套接字,c,sockets,C,Sockets,通用条款4.4.4 c89 Visual Studio VC++2008 我正在编写一个跨平台的客户机-服务器应用程序。它将在linux和windows上运行 然而,我只是想知道我所做的关闭插座是正确的。我关闭文件描述符。但是,如果关闭它有问题。最好的处理方法是什么。可能仍在发送或接收某些数据 非常感谢你的建议 if(close(sockfd) == -1) { #if defined ( _WIN32 ) fprintf(stderr, "[ %d ] [ %s
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上使用closesocket,而不是close 在处理错误方面,请查看可能的错误代码,并决定要处理哪些错误代码:
“在使用此功能之前必须进行成功的WSAStartup调用”可能意味着应用程序中存在错误,而不是您可以随时处理的问题,因此良好的日志记录是一个好主意。我忘记添加windows的closesocket。刚刚在linux上完成编译。谢谢。Microsoft提供了有关干净关闭套接字的正确方法的文档:。您可以将其转换为同样适用于Linux的东西。