我正在开发一个与OpenSSL通信的Linux应用程序。我目前正在运行一些鲁棒性测试,其中一项给我带来了困难。
我的程序正在下载大文件时,请拔出以太网电缆,并希望它在30秒后停止。但是它永远不会停止。
我使用SSL_read,这是它阻止的地方:
count = SSL_read(ssl, buffer, BUFSIZE);
是否可以将超时设置为SSL_read?
我尝试了SSL_CTX_set_timeout()
,但是它不起作用。我也看到也许可以使用select()
,但是我不知道如何在SSL_read()
答案 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);