1 | #include "TimeoutSetter.h" |
2 | |
3 | #include <common/logger_useful.h> |
4 | |
5 | namespace DB |
6 | { |
7 | TimeoutSetter::TimeoutSetter(Poco::Net::StreamSocket & socket_, |
8 | const Poco::Timespan & send_timeout_, |
9 | const Poco::Timespan & receive_timeout_, |
10 | bool limit_max_timeout) |
11 | : socket(socket_), send_timeout(send_timeout_), receive_timeout(receive_timeout_) |
12 | { |
13 | old_send_timeout = socket.getSendTimeout(); |
14 | old_receive_timeout = socket.getReceiveTimeout(); |
15 | |
16 | if (!limit_max_timeout || old_send_timeout > send_timeout) |
17 | socket.setSendTimeout(send_timeout); |
18 | |
19 | if (!limit_max_timeout || old_receive_timeout > receive_timeout) |
20 | socket.setReceiveTimeout(receive_timeout); |
21 | } |
22 | |
23 | TimeoutSetter::TimeoutSetter(Poco::Net::StreamSocket & socket_, const Poco::Timespan & timeout_, bool limit_max_timeout) |
24 | : TimeoutSetter(socket_, timeout_, timeout_, limit_max_timeout) |
25 | { |
26 | } |
27 | |
28 | TimeoutSetter::~TimeoutSetter() |
29 | { |
30 | try |
31 | { |
32 | socket.setSendTimeout(old_send_timeout); |
33 | socket.setReceiveTimeout(old_receive_timeout); |
34 | } |
35 | catch (std::exception & e) |
36 | { |
37 | // Sometimes catched on macos |
38 | LOG_ERROR(&Logger::get("Client" ), std::string{"TimeoutSetter: Can't reset timeouts: " } + e.what()); |
39 | } |
40 | } |
41 | } |
42 | |