簡體   English   中英

在 C++ 中為 OpenSSL 中的 SSL_read 設置連接超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM