连接由peer和CLOSE_WAIT重置

时间:2017-10-26 13:44:35

标签: c++ sockets

我有一个使用套接字和TCP协议的服务器,我正在使用OpenSSL。在建立一堆连接之后我收到了一个错误。发生了很多套接字仍然处于CLOSE_WAIT状态。我看了我的应用程序和代码的日志,我有一个errno = 104,我搜索和在linux(我的操作系统)是

  

通过对等方重置连接

我的应用程序是用C ++编写的,我想知道哪些场景可能导致这种情况。我的意思是这只发生在服务器试图关闭连接时,在套接字中仍然有一些客户端没有读取的信息?如果是这样怎么能避免这个?可以是认证问题吗?谢谢

关闭服务器连接的代码是这样的。

int lErrorCode = 0;
    int lErrno = 0;
    int lSSLErrorCode = 0;
    long int lSSLErrorAdditionalCode = 0;
    while (!lErrorCode)
    {
        lSSLErrorCode = SSL_get_error(pSSL, lErrorCode);
        lSSLErrorAdditionalCode = ERR_get_error();
        usleep(10);
    }
    if (lErrorCode == -1)
    {
        cout << "shutdown error" << endl;
        if (_log_iface)
        {
            char lSSLErrorString[120];
            ERR_error_string(lSSLErrorAdditionalCode, lSSLErrorString);

            string ssl_error_desc;
            switch (lSSLErrorCode)
            {
            case SSL_ERROR_NONE:
                ssl_error_desc = "SSL_ERROR_NONE";
                break;
            case SSL_ERROR_ZERO_RETURN:
                ssl_error_desc = "SSL_ERROR_ZERO_RETURN";
                break;
            case SSL_ERROR_WANT_READ:
                ssl_error_desc = "SSL_ERROR_WANT_READ";
                break;
            case SSL_ERROR_WANT_WRITE:
                ssl_error_desc = "SSL_ERROR_WANT_WRITE";
                break;
            case SSL_ERROR_WANT_CONNECT:
                ssl_error_desc = "SSL_ERROR_WANT_CONNECT";
                break;
            case SSL_ERROR_WANT_ACCEPT:
                ssl_error_desc = "SSL_ERROR_WANT_ACCEPT";
                break;
            case SSL_ERROR_WANT_X509_LOOKUP:
                ssl_error_desc = "SSL_ERROR_WANT_X509_LOOKUP";
                break;
            case SSL_ERROR_SYSCALL:
                ssl_error_desc = "SSL_ERROR_SYSCALL";
                break;
            case SSL_ERROR_SSL:
                ssl_error_desc = "SSL_ERROR_SSL";
                break;
            default:
                ssl_error_desc = "[unknown]";
                break;
            }

//HERE LOG THE ERROR MESSAGE

0 个答案:

没有答案