#include <time.h>
#include <algorithm>
+#include <tuple>
#include <apt-pkg/configuration.h>
#include <apt-pkg/error.h>
#include "srvrec.h"
+bool SrvRec::operator==(SrvRec const &other) const
+{
+ return (std::tie(target, priority, weight, port) ==
+ std::tie(other.target, other.priority, other.weight, other.port));
+}
+
bool GetSrvRecords(std::string host, int port, std::vector<SrvRec> &Result)
{
std::string target;
- struct servent *s_ent = getservbyport(htons(port), "tcp");
- if (s_ent == NULL)
+ int res;
+ struct servent s_ent_buf;
+ struct servent *s_ent = nullptr;
+ std::vector<char> buf(1024);
+
+ res = getservbyport_r(htons(port), "tcp", &s_ent_buf, buf.data(), buf.size(), &s_ent);
+ if (res != 0 || s_ent == nullptr)
return false;
strprintf(target, "_%s._tcp.%s", s_ent->s_name, host.c_str());
#endif
// shuffle in a very simplistic way for now (equal weights)
- std::vector<SrvRec>::const_iterator I = Recs.begin();
- std::vector<SrvRec>::const_iterator const J = std::find_if(Recs.cbegin(), Recs.cend(),
+ std::vector<SrvRec>::iterator I = Recs.begin();
+ std::vector<SrvRec>::iterator const J = std::find_if(Recs.begin(), Recs.end(),
[&I](SrvRec const &J) { return I->priority != J.priority; });
// clock seems random enough.