+// Connect - Connect to a 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 (_error->PendingError() == true)
+ return false;
+
+ if(LastHost != Host || LastPort != Port)
+ {
+ SrvRecords.clear();
+ if (_config->FindB("Acquire::EnableSrvRecords", true) == true)
+ GetSrvRecords(Host, DefPort, SrvRecords);
+ }
+ // we have no SrvRecords for this host, connect right away
+ if(SrvRecords.size() == 0)
+ return ConnectToHostname(Host, Port, Service, DefPort, Fd,
+ TimeOut, Owner);
+
+ // try to connect in the priority order of the srv records
+ while(SrvRecords.size() > 0)
+ {
+ Host = PopFromSrvRecs(SrvRecords).target;
+ 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;
+}