diff --git a/lib/BasicsC/socket-utils.c b/lib/BasicsC/socket-utils.c index 05b06bd11a..a6e59d7566 100644 --- a/lib/BasicsC/socket-utils.c +++ b/lib/BasicsC/socket-utils.c @@ -93,7 +93,7 @@ int TRI_closesocket (TRI_socket_t s) { if (s.fileDescriptor != TRI_INVALID_SOCKET) { res = close(s.fileDescriptor); } - #endif +#endif return res; } diff --git a/lib/GeneralServer/GeneralSslServer.h b/lib/GeneralServer/GeneralSslServer.h index bb520afa68..4d70ce2ace 100644 --- a/lib/GeneralServer/GeneralSslServer.h +++ b/lib/GeneralServer/GeneralSslServer.h @@ -230,20 +230,20 @@ namespace triagens { LOG_DEBUG("trying to establish secure connection"); // convert in a SSL BIO structure - BIO * sbio = BIO_new_socket((int) TRI_get_fd_or_handle_of_socket(socket), BIO_NOCLOSE); + BIO* sbio = BIO_new_socket((int) TRI_get_fd_or_handle_of_socket(socket), BIO_NOCLOSE); - if (sbio == 0) { + if (sbio == nullptr) { LOG_WARNING("cannot build new SSL BIO: %s", triagens::basics::lastSSLError().c_str()); TRI_CLOSE_SOCKET(socket); return; } // build a new connection - SSL * ssl = SSL_new(ctx); + SSL* ssl = SSL_new(ctx); info.sslContext = ssl; - if (ssl == 0) { + if (ssl == nullptr) { BIO_free_all(sbio); LOG_WARNING("cannot build new SSL connection: %s", triagens::basics::lastSSLError().c_str()); TRI_CLOSE_SOCKET(socket); @@ -290,7 +290,7 @@ namespace triagens { /// @brief verification callback //////////////////////////////////////////////////////////////////////////////// - int (*verificationCallback)(int, X509_STORE_CTX *); + int (*verificationCallback)(int, X509_STORE_CTX*); }; } } diff --git a/lib/Scheduler/ListenTask.cpp b/lib/Scheduler/ListenTask.cpp index 8b4a26e376..678b181336 100644 --- a/lib/Scheduler/ListenTask.cpp +++ b/lib/Scheduler/ListenTask.cpp @@ -109,7 +109,7 @@ bool ListenTask::setup (Scheduler* scheduler, EventLoop loop) { // .......................................................................... LOG_TRACE("attempting to convert socket handle to socket descriptor"); - if (!TRI_isvalidsocket(_listenSocket)) { + if (! TRI_isvalidsocket(_listenSocket)) { LOG_ERROR("In ListenTask::setup could not convert socket handle to socket descriptor -- invalid socket handle"); return false; } @@ -178,7 +178,7 @@ bool ListenTask::handleEvent (EventToken token, EventType revents) { TRI_socket_t connectionSocket; connectionSocket = TRI_accept(_listenSocket, (sockaddr*) &addr, &len); - if (!TRI_isvalidsocket(connectionSocket)) { + if (! TRI_isvalidsocket(connectionSocket)) { ++acceptFailures; if (acceptFailures < MAX_ACCEPT_ERRORS) { @@ -200,7 +200,7 @@ bool ListenTask::handleEvent (EventToken token, EventType revents) { int res = TRI_getsockname(connectionSocket, (sockaddr*) &addr_out, &len_out); - if (res != 0) { + if (res != TRI_ERROR_NO_ERROR) { TRI_CLOSE_SOCKET(connectionSocket); LOG_WARNING("getsockname failed with %d (%s)", errno, strerror(errno)); diff --git a/lib/SimpleHttpClient/GeneralClientConnection.h b/lib/SimpleHttpClient/GeneralClientConnection.h index 223fbf9dc2..ecab4a25c4 100644 --- a/lib/SimpleHttpClient/GeneralClientConnection.h +++ b/lib/SimpleHttpClient/GeneralClientConnection.h @@ -134,6 +134,14 @@ namespace triagens { _numConnectRetries = 0; } +//////////////////////////////////////////////////////////////////////////////// +/// @brief returns the number of configured connect retries +//////////////////////////////////////////////////////////////////////////////// + + inline size_t connectRetries () const { + return _connectRetries; + } + //////////////////////////////////////////////////////////////////////////////// /// @brief connect //////////////////////////////////////////////////////////////////////////////// diff --git a/lib/SimpleHttpClient/SimpleHttpClient.cpp b/lib/SimpleHttpClient/SimpleHttpClient.cpp index 6bcaaf8c6f..4107a4156c 100644 --- a/lib/SimpleHttpClient/SimpleHttpClient.cpp +++ b/lib/SimpleHttpClient/SimpleHttpClient.cpp @@ -113,6 +113,8 @@ namespace triagens { TRI_ASSERT(_state == IN_CONNECT || _state == IN_WRITE); + size_t const maxConnects = _connection->connectRetries(); + size_t connects = 0; double endTime = now() + _requestTimeout; double remainingTime = _requestTimeout; @@ -120,6 +122,15 @@ namespace triagens { while (isWorking() && remainingTime > 0.0) { switch (_state) { case (IN_CONNECT): { + if (++connects > maxConnects) { + // too many connects + SimpleHttpResult* result = getResult(); + + _result = nullptr; + return result; + } + + handleConnect(); break; } @@ -191,7 +202,7 @@ namespace triagens { remainingTime = endTime - now(); } - if (isWorking() && _errorMessage == "" ) { + if (isWorking() && _errorMessage.empty()) { setErrorMessage("Request timeout reached"); } @@ -248,29 +259,33 @@ namespace triagens { _pathToBasicAuth.push_back(make_pair(prefix, value)); } +//////////////////////////////////////////////////////////////////////////////// +/// @brief return the result +//////////////////////////////////////////////////////////////////////////////// + SimpleHttpResult* SimpleHttpClient::getResult () { switch (_state) { - case (IN_CONNECT): - _result->setResultType(SimpleHttpResult::COULD_NOT_CONNECT); - break; - - case (IN_WRITE): + case IN_WRITE: _result->setResultType(SimpleHttpResult::WRITE_ERROR); break; - case (IN_READ_HEADER): - case (IN_READ_BODY): - case (IN_READ_CHUNKED_HEADER): - case (IN_READ_CHUNKED_BODY): + case IN_READ_HEADER: + case IN_READ_BODY: + case IN_READ_CHUNKED_HEADER: + case IN_READ_CHUNKED_BODY: _result->setResultType(SimpleHttpResult::READ_ERROR); break; - case (FINISHED): + case FINISHED: _result->setResultType(SimpleHttpResult::COMPLETE); break; - default : + case IN_CONNECT: + default: { _result->setResultType(SimpleHttpResult::COULD_NOT_CONNECT); + setErrorMessage("Could not connect"); + break; + } } return _result;