From ce50158800706d6e4b4b458f76009ec5eb47c582 Mon Sep 17 00:00:00 2001 From: Christos Tsantilas Date: Sat, 19 Dec 2015 01:44:01 +1300 Subject: [PATCH] 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 --- src/FwdState.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 -- 2.47.2