diff options
author | Oleg Morozenkov <m@oleg.rocks> | 2021-04-06 00:58:34 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-06 00:58:34 +0300 |
commit | a0d31e277f0b62d24b5ee1777c07c7c942b92e1b (patch) | |
tree | 882ea522bf30ca36749a0456176dc16aa372ae51 /src/net/BoostHttpOnlySslClient.cpp | |
parent | f2d7dc110d3ba37914298bd073500396fcf93967 (diff) | |
parent | a7c75fdc8177d2fa6ed13293945a7d80d32cdbad (diff) |
Merge pull request #165 from MPSMPS/master
Fixes https://github.com/reo7sp/tgbot-cpp/issues/162
Diffstat (limited to 'src/net/BoostHttpOnlySslClient.cpp')
-rw-r--r-- | src/net/BoostHttpOnlySslClient.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/net/BoostHttpOnlySslClient.cpp b/src/net/BoostHttpOnlySslClient.cpp index 301d0c8..6e59649 100644 --- a/src/net/BoostHttpOnlySslClient.cpp +++ b/src/net/BoostHttpOnlySslClient.cpp @@ -48,6 +48,32 @@ string BoostHttpOnlySslClient::makeRequest(const Url& url, const vector<HttpReqA string requestText = _httpParser.generateRequest(url, args, false); write(socket, buffer(requestText.c_str(), requestText.length())); + fd_set fileDescriptorSet; + struct timeval timeStruct; + + // set the timeout to 20 seconds + timeStruct.tv_sec = 20; + timeStruct.tv_usec = 0; + FD_ZERO(&fileDescriptorSet); + + // We'll need to get the underlying native socket for this select call, in order + // to add a simple timeout on the read: + + int nativeSocket = socket.lowest_layer().native_handle(); + + FD_SET(nativeSocket,&fileDescriptorSet); + select(nativeSocket+1,&fileDescriptorSet,NULL,NULL,&timeStruct); + + if(!FD_ISSET(nativeSocket,&fileDescriptorSet)){ // timeout + + std::string sMsg("TIMEOUT on read client data. Client IP: "); + + sMsg.append(socket.next_layer().remote_endpoint().address().to_string()); + _ioService.reset(); + + throw std::exception(); + } + string response; #ifdef TGBOT_CHANGE_READ_BUFFER_SIZE |