【问题标题】:closing sockets on linux and windows在 linux 和 windows 上关闭套接字
【发布时间】:2010-05-24 15:59:46
【问题描述】:

gcc 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;
    }

【问题讨论】:

标签: c sockets


【解决方案1】:

好吧,你需要在 Windows 上使用 closesocket,而不是关闭。

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

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

【讨论】:

  • 我忘记为 windows 添加 closesocket。刚刚在linux上编译完成。谢谢。
猜你喜欢
  • 2012-10-01
  • 2023-03-10
  • 1970-01-01
  • 2011-05-26
  • 2013-04-12
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多