gpt4 book ai didi

c++ - SSL_accept 需要 200 毫秒 (c/openssl)

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:32 25 4
gpt4 key购买 nike

SSL_accept(ssl) 200ms 正常吗?

作为 Windows 服务运行,用 C++ 编写,使用 MFC 和 Boost。在英特尔至强 e5620 2.4G、4GB 内存和 Win 7 Pro 上运行。

以下是我的代码。同时我怀疑 SSL_accept 之前的其他方法(SSL_CTX_* RAND_* 等)可能会消耗很长时间,但我记录了所有内容并发现 SSL_accept 一直在吃东西。

int verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
{
return preverify_ok;
}
void somemethod() {
SSL *ssl = 0;
SSL_CTX *tlsctx = 0;
int ret_conn = -1;
tlsctx = SSL_CTX_new( SSLv23_method());

SSL_CTX_use_certificate_file(tlsctx, sCert , SSL_FILETYPE_PEM);

SSL_CTX_use_PrivateKey_file(tlsctx, sKey , SSL_FILETYPE_PEM);

RAND_write_file(sRandomPem);
int _rand_loaded = RAND_load_file(sRandomPem, -1 );

if(! SSL_CTX_load_verify_locations(tlsctx, sCACert, NULL))
{
// TODO // /* Handle error here */
}
SSL_CTX_set_verify( tlsctx, SSL_VERIFY_PEER, verify_callback );

ssl = SSL_new(tlsctx);

int _error = SSL_ERROR_WANT_READ;

int loopCount = 0;


// START MEASURING TIME FROM HERE
SSL_set_fd(ssl, _sck);
while(ret_conn != 1 )
{
loopCount++;

ret_conn = SSL_accept(ssl);

_error = SSL_get_error(ssl, ret_conn);
switch (_error)
{
case SSL_ERROR_NONE:
break;
case SSL_ERROR_WANT_WRITE:
break;
case SSL_ERROR_WANT_READ:
break;
case SSL_ERROR_WANT_X509_LOOKUP:
break;
case SSL_ERROR_SYSCALL:
break;
case SSL_ERROR_SSL:
break;
case SSL_ERROR_ZERO_RETURN:
break;
}

if( _error == SSL_ERROR_WANT_READ || _error == SSL_ERROR_WANT_WRITE)
{
Sleep(1);
} else
{
break;
}
}

if( ret_conn < 1)
{
Log("SSL_accept -1 ", ERR_error_string(_error, NULL));
return;
}
// MEASURING END HERE, takes ~200ms (on successfully accepting connection)
}

最佳答案

据我所知,SSL_accept 是一个阻塞函数,它等待您的客户端连接。如果您的客户端比开始 SSL_accept 调用晚 200 毫秒连接,那么您将测量该等待时间。

关于c++ - SSL_accept 需要 200 毫秒 (c/openssl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12313947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com