Commit 5b886a94 authored by jan.koester's avatar jan.koester
Browse files

timeout httpclient

parent 2e5137d1
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -453,6 +453,8 @@ void libhttppp::HttpClient::_ensureConnected() {
// Returns 0 on connection closure. Throws on hard errors.
// Hard timeout to prevent infinite hangs on silently-dead connections.
size_t libhttppp::HttpClient::_recvBlocking(netplus::buffer &b, int timeout_sec) {
    if (timeout_sec <= 0)
        timeout_sec = _recvTimeoutSec;
    auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(timeout_sec);
    for (;;) {
        try {
@@ -486,7 +488,7 @@ size_t libhttppp::HttpClient::_recvNonBlocking(netplus::buffer &b) {

// Efficient send: uses socketwait::waitWrite() instead of busy-waiting
void libhttppp::HttpClient::_sendAll(const char *data, size_t len) {
    auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(30);
    auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(_sendTimeoutSec);
    size_t off = 0;
    while (off < len) {
        netplus::buffer buf(data + off, len - off);
+3 −0
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ namespace libhttppp {
      HttpClient( const HttpUrl &desturl, int vers = 2);
      ~HttpClient()=default;
      void reconnect();
      void setTimeout(int timeout_sec);
      const std::vector<char> Get(HttpRequest &nreq, size_t maxTries=0);
      const std::vector<char> Post(HttpRequest &nreq,const std::vector<char> &post, size_t maxTries=0);
      const std::vector<char> Put(HttpRequest &nreq,const std::vector<char> &put, size_t maxTries=0);
@@ -177,6 +178,8 @@ namespace libhttppp {
      std::unique_ptr<netplus::socket> _cltsock;
      netplus::socketwait _sw;
      netplus::x509cert _cert;
      int _recvTimeoutSec = 60;
      int _sendTimeoutSec = 30;
  };