我有一个使用套接字和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