From: Christos Tsantilas Date: Wed, 16 Dec 2015 13:47:22 +0000 (+0200) Subject: FwdState should retry connect to the next ip after a Ssl::PeerConnector failure X-Git-Tag: SQUID_4_0_4~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=89d7efa521dc273ffd37e7b15917b31511d9f502;p=thirdparty%2Fsquid.git 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 786a8cd2ff..84ab620af8 100644 --- a/src/FwdState.cc +++ b/src/FwdState.cc @@ -680,15 +680,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(); @@ -727,7 +722,9 @@ FwdState::connectedToPeer(Security::EncryptorAnswer &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; } @@ -735,6 +732,10 @@ FwdState::connectedToPeer(Security::EncryptorAnswer &answer) CallJobHere1(17, 4, request->clientConnectionManager, ConnStateData, ConnStateData::notePeerConnection, serverConnection()); + if (serverConnection()->getPeer()) + peerConnectSucceded(serverConnection()->getPeer()); + + flags.connected_okay = true; dispatch(); }