[英]Set connection timeout for SSL_read in OpenSSL in C++
我正在開發一個與 OpenSSL 通信的 linux 應用程序。 我目前正在運行一些穩健性測試,其中之一讓我感到很困難。
當我的程序正在下載一個大文件時,我拔掉了以太網電纜,我希望它在 30 秒后停止。 但它永遠不會停止。
我使用 SSL_read,這是它阻止的地方:
count = SSL_read(ssl, buffer, BUFSIZE);
是否可以將超時設置為 SSL_read ?
我嘗試過SSL_CTX_set_timeout()
但它不起作用。 我還看到可能可以使用select()
但我不明白如何將它與SSL_read()
一起使用
您可以像使用普通套接字一樣執行此操作。 基本上,您在套接字上設置timeval
,在 ssl 代碼中,當timeval
設置的時間過去時, SSL_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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.