From: Christos Tsantilas Date: Fri, 18 Dec 2015 12:44:01 +0000 (+1300) Subject: Fix connection retry and fallback after failed server TLS connections X-Git-Tag: SQUID_3_5_13~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ce50158800706d6e4b4b458f76009ec5eb47c582;p=thirdparty%2Fsquid.git Fix connection retry and fallback after failed server TLS connections FwdState should retry connect to the next ip after a Ssl::PeerConnector failure When the Ssl::PeerConnector fails to establish an SSL connection FwdState does not retry to connect to the next destination server ip address, but instead returns an error. This is a Measurement Factory project --- diff --git a/src/FwdState.cc b/src/FwdState.cc index 73f27aaf74..18ae41c7a4 100644 --- a/src/FwdState.cc +++ b/src/FwdState.cc @@ -672,15 +672,10 @@ FwdState::connectDone(const Comm::ConnectionPointer &conn, Comm::Flag status, in } serverConn = conn; - flags.connected_okay = true; - debugs(17, 3, HERE << serverConnection() << ": '" << entry->url() << "'" ); comm_add_close_handler(serverConnection()->fd, fwdServerClosedWrapper, this); - if (serverConnection()->getPeer()) - peerConnectSucceded(serverConnection()->getPeer()); - #if USE_OPENSSL if (!request->flags.pinned) { const CachePeer *p = serverConnection()->getPeer(); @@ -719,10 +714,16 @@ FwdState::connectedToPeer(Ssl::PeerConnectorAnswer &answer) if (ErrorState *error = answer.error.get()) { fail(error); answer.error.clear(); // preserve error for errorSendComplete() - self = NULL; + if (CachePeer *p = serverConnection()->getPeer()) + peerConnectFailed(p); + retryOrBail(); return; } + if (serverConnection()->getPeer()) + peerConnectSucceded(serverConnection()->getPeer()); + + flags.connected_okay = true; dispatch(); } #endif