diff options
Diffstat (limited to 'methods')
-rw-r--r-- | methods/connect.cc | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/methods/connect.cc b/methods/connect.cc index 8de4ad747..9e0f01ee3 100644 --- a/methods/connect.cc +++ b/methods/connect.cc @@ -136,7 +136,7 @@ static bool DoConnect(struct addrinfo *Addr,std::string Host, /*}}}*/ // Connect to a given Hostname -bool ConnectAfterSrvRecords(std::string Host,int Port,const char *Service, +bool ConnectToHostname(std::string Host,int Port,const char *Service, int DefPort,int &Fd, unsigned long TimeOut,pkgAcqMethod *Owner) { @@ -261,36 +261,34 @@ bool ConnectAfterSrvRecords(std::string Host,int Port,const char *Service, /*}}}*/ // Connect - Connect to a server /*{{{*/ // --------------------------------------------------------------------- -/* Performs a connection to the server */ +/* Performs a connection to the server (including SRV record lookup) */ bool Connect(std::string Host,int Port,const char *Service, int DefPort,int &Fd, unsigned long TimeOut,pkgAcqMethod *Owner) { -#if 0 if (_error->PendingError() == true) return false; -#endif if(LastHost != Host || LastPort != Port) { SrvRecords.clear(); bool res = GetSrvRecords(Host, DefPort, SrvRecords); } + // we have no SrvRecords for this host, connect right away if(SrvRecords.size() == 0) - return ConnectAfterSrvRecords(Host, Port, Service, DefPort, Fd, + return ConnectToHostname(Host, Port, Service, DefPort, Fd, TimeOut, Owner); - bool connected = false; + // try to connect in the priority order of the srv records while(SrvRecords.size() > 0) { Host = SrvRecords[0].target; - connected = ConnectAfterSrvRecords(Host, Port, Service, DefPort, Fd, - TimeOut, Owner); - if(connected == true) + if(ConnectToHostname(Host, Port, Service, DefPort, Fd, TimeOut, Owner)) return true; // we couldn't connect to this one, use the next SrvRecords.erase(SrvRecords.begin()); - } + } + return false; } |