Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中为OpenSSL中读取的SSL设置连接超时+;_C++_Ssl_Timeout - Fatal编程技术网

C++ 在C+;中为OpenSSL中读取的SSL设置连接超时+;

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(),但我不知道如何将它与

我正在开发一个与OpenSSL通信的linux应用程序。我目前正在运行一些健壮性测试,其中一个测试给我带来了困难

当我的程序下载一个大文件时,我会拔掉以太网电缆,我希望它在30秒后停止。但它从未停止

我使用SSL_read,这是它阻止的地方:

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);