C++ 在C+;中为OpenSSL中读取的SSL设置连接超时+;
我正在开发一个与OpenSSL通信的linux应用程序。我目前正在运行一些健壮性测试,其中一个测试给我带来了困难 当我的程序下载一个大文件时,我会拔掉以太网电缆,我希望它在30秒后停止。但它从未停止 我使用SSL_read,这是它阻止的地方:C++ 在C+;中为OpenSSL中读取的SSL设置连接超时+;,c++,ssl,timeout,C++,Ssl,Timeout,我正在开发一个与OpenSSL通信的linux应用程序。我目前正在运行一些健壮性测试,其中一个测试给我带来了困难 当我的程序下载一个大文件时,我会拔掉以太网电缆,我希望它在30秒后停止。但它从未停止 我使用SSL_read,这是它阻止的地方: count = SSL_read(ssl, buffer, BUFSIZE); 是否可以将超时设置为SSL\U读取 我尝试了SSL\u CTX\u set\u timeout(),但它不起作用。我还看到,可能可以使用select(),但我不知道如何将它与
count = SSL_read(ssl, buffer, BUFSIZE);
是否可以将超时设置为SSL\U读取
我尝试了
SSL\u CTX\u set\u timeout()
,但它不起作用。我还看到,可能可以使用select()
,但我不知道如何将它与SSL\u read()
一起使用。您可以使用与普通套接字相同的方法来执行此操作。基本上,您可以在套接字上设置timeval
,在ssl代码中,当timeval
中设置的时间过去时,ssl\u read
将返回-1
int fd, new_fd;
struct timeval tv;
char buffer[1024];
// ...
tv.tv_sec = 5; // 5 seconds
tv.tv_usec = 0;
setsockopt(new_fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);
// ...
// this will return -1 if nothing is received after 5 seconds
SSL_read(ssl, buffer, sizeof buffer);