mirror of https://gitee.com/bigwinds/arangodb
prevent endless connection attempts by arangosh
This commit is contained in:
parent
804099aa1a
commit
98a0ef0ded
|
@ -232,7 +232,7 @@ namespace triagens {
|
||||||
// convert in a SSL BIO structure
|
// 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());
|
LOG_WARNING("cannot build new SSL BIO: %s", triagens::basics::lastSSLError().c_str());
|
||||||
TRI_CLOSE_SOCKET(socket);
|
TRI_CLOSE_SOCKET(socket);
|
||||||
return;
|
return;
|
||||||
|
@ -243,7 +243,7 @@ namespace triagens {
|
||||||
|
|
||||||
info.sslContext = ssl;
|
info.sslContext = ssl;
|
||||||
|
|
||||||
if (ssl == 0) {
|
if (ssl == nullptr) {
|
||||||
BIO_free_all(sbio);
|
BIO_free_all(sbio);
|
||||||
LOG_WARNING("cannot build new SSL connection: %s", triagens::basics::lastSSLError().c_str());
|
LOG_WARNING("cannot build new SSL connection: %s", triagens::basics::lastSSLError().c_str());
|
||||||
TRI_CLOSE_SOCKET(socket);
|
TRI_CLOSE_SOCKET(socket);
|
||||||
|
|
|
@ -200,7 +200,7 @@ bool ListenTask::handleEvent (EventToken token, EventType revents) {
|
||||||
|
|
||||||
int res = TRI_getsockname(connectionSocket, (sockaddr*) &addr_out, &len_out);
|
int res = TRI_getsockname(connectionSocket, (sockaddr*) &addr_out, &len_out);
|
||||||
|
|
||||||
if (res != 0) {
|
if (res != TRI_ERROR_NO_ERROR) {
|
||||||
TRI_CLOSE_SOCKET(connectionSocket);
|
TRI_CLOSE_SOCKET(connectionSocket);
|
||||||
|
|
||||||
LOG_WARNING("getsockname failed with %d (%s)", errno, strerror(errno));
|
LOG_WARNING("getsockname failed with %d (%s)", errno, strerror(errno));
|
||||||
|
|
|
@ -134,6 +134,14 @@ namespace triagens {
|
||||||
_numConnectRetries = 0;
|
_numConnectRetries = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief returns the number of configured connect retries
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
inline size_t connectRetries () const {
|
||||||
|
return _connectRetries;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief connect
|
/// @brief connect
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -113,6 +113,8 @@ namespace triagens {
|
||||||
|
|
||||||
TRI_ASSERT(_state == IN_CONNECT || _state == IN_WRITE);
|
TRI_ASSERT(_state == IN_CONNECT || _state == IN_WRITE);
|
||||||
|
|
||||||
|
size_t const maxConnects = _connection->connectRetries();
|
||||||
|
size_t connects = 0;
|
||||||
|
|
||||||
double endTime = now() + _requestTimeout;
|
double endTime = now() + _requestTimeout;
|
||||||
double remainingTime = _requestTimeout;
|
double remainingTime = _requestTimeout;
|
||||||
|
@ -120,6 +122,15 @@ namespace triagens {
|
||||||
while (isWorking() && remainingTime > 0.0) {
|
while (isWorking() && remainingTime > 0.0) {
|
||||||
switch (_state) {
|
switch (_state) {
|
||||||
case (IN_CONNECT): {
|
case (IN_CONNECT): {
|
||||||
|
if (++connects > maxConnects) {
|
||||||
|
// too many connects
|
||||||
|
SimpleHttpResult* result = getResult();
|
||||||
|
|
||||||
|
_result = nullptr;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
handleConnect();
|
handleConnect();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -191,7 +202,7 @@ namespace triagens {
|
||||||
remainingTime = endTime - now();
|
remainingTime = endTime - now();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isWorking() && _errorMessage == "" ) {
|
if (isWorking() && _errorMessage.empty()) {
|
||||||
setErrorMessage("Request timeout reached");
|
setErrorMessage("Request timeout reached");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,29 +259,33 @@ namespace triagens {
|
||||||
_pathToBasicAuth.push_back(make_pair(prefix, value));
|
_pathToBasicAuth.push_back(make_pair(prefix, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief return the result
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
SimpleHttpResult* SimpleHttpClient::getResult () {
|
SimpleHttpResult* SimpleHttpClient::getResult () {
|
||||||
switch (_state) {
|
switch (_state) {
|
||||||
case (IN_CONNECT):
|
case IN_WRITE:
|
||||||
_result->setResultType(SimpleHttpResult::COULD_NOT_CONNECT);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case (IN_WRITE):
|
|
||||||
_result->setResultType(SimpleHttpResult::WRITE_ERROR);
|
_result->setResultType(SimpleHttpResult::WRITE_ERROR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (IN_READ_HEADER):
|
case IN_READ_HEADER:
|
||||||
case (IN_READ_BODY):
|
case IN_READ_BODY:
|
||||||
case (IN_READ_CHUNKED_HEADER):
|
case IN_READ_CHUNKED_HEADER:
|
||||||
case (IN_READ_CHUNKED_BODY):
|
case IN_READ_CHUNKED_BODY:
|
||||||
_result->setResultType(SimpleHttpResult::READ_ERROR);
|
_result->setResultType(SimpleHttpResult::READ_ERROR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (FINISHED):
|
case FINISHED:
|
||||||
_result->setResultType(SimpleHttpResult::COMPLETE);
|
_result->setResultType(SimpleHttpResult::COMPLETE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
case IN_CONNECT:
|
||||||
|
default: {
|
||||||
_result->setResultType(SimpleHttpResult::COULD_NOT_CONNECT);
|
_result->setResultType(SimpleHttpResult::COULD_NOT_CONNECT);
|
||||||
|
setErrorMessage("Could not connect");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return _result;
|
return _result;
|
||||||
|
|
Loading…
Reference in New Issue