C 关闭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

通用条款4.4.4 c89 Visual Studio VC++2008

我正在编写一个跨平台的客户机-服务器应用程序。它将在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上使用closesocket,而不是close

在处理错误方面,请查看可能的错误代码,并决定要处理哪些错误代码:


“在使用此功能之前必须进行成功的WSAStartup调用”可能意味着应用程序中存在错误,而不是您可以随时处理的问题,因此良好的日志记录是一个好主意。

我忘记添加windows的closesocket。刚刚在linux上完成编译。谢谢。Microsoft提供了有关干净关闭套接字的正确方法的文档:。您可以将其转换为同样适用于Linux的东西。