在C ++中为OpenSSL中的SSL_read设置连接超时

时间:2019-04-10 12:55:25

标签: c++ ssl timeout

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

我的程序正在下载大文件时,请拔出以太网电缆,并希望它在30秒后停止。但是它永远不会停止。

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

count = SSL_read(ssl, buffer, BUFSIZE);

是否可以将超时设置为SSL_read?

我尝试了SSL_CTX_set_timeout(),但是它不起作用。我也看到也许可以使用select(),但是我不知道如何在SSL_read()

中使用它

1 个答案:

答案 0 :(得分:0)

您可以按照与普通套接字相同的方式进行操作。基本上,您在套接字上设置了timeval,并且在ssl代码中,SSL_read中设置的时间过去后,timeval将返回-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);