diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp index 3d5e79de587b9195236d8f9e751fa7fed55d453d..dec5b6c1428fbf0651e539a231e843c99847d408 100644 --- a/src/sip/sipvoiplink.cpp +++ b/src/sip/sipvoiplink.cpp @@ -495,17 +495,22 @@ SIPVoIPLink::SIPVoIPLink() : pool_(nullptr, pj_pool_release) auto ns = ip_utils::getLocalNameservers(); if (not ns.empty()) { std::vector<pj_str_t> dns_nameservers(ns.size()); + std::vector<pj_uint16_t> dns_ports(ns.size()); for (unsigned i=0, n=ns.size(); i<n; i++) { char hbuf[NI_MAXHOST]; - getnameinfo((sockaddr*)&ns[i], ns[i].getLength(), hbuf, sizeof(hbuf), nullptr, 0, NI_NUMERICHOST); - RING_DBG("Using SIP nameserver: %s", hbuf); - pj_strdup2(pool_.get(), &dns_nameservers[i], hbuf); + if (auto ret = getnameinfo((sockaddr*)&ns[i], ns[i].getLength(), hbuf, sizeof(hbuf), nullptr, 0, NI_NUMERICHOST)) { + RING_WARN("Error printing SIP nameserver: %s", strerror(ret)); + } else { + RING_DBG("Using SIP nameserver: %s", hbuf); + pj_strdup2(pool_.get(), &dns_nameservers[i], hbuf); + dns_ports[i] = ns[i].getPort(); + } } pj_dns_resolver* resv; if (auto ret = pjsip_endpt_create_resolver(endpt_, &resv)) { RING_WARN("Error creating SIP DNS resolver: %s", sip_utils::sip_strerror(ret).c_str()); } else { - if (auto ret = pj_dns_resolver_set_ns(resv, ns.size(), dns_nameservers.data(), nullptr)) { + if (auto ret = pj_dns_resolver_set_ns(resv, dns_nameservers.size(), dns_nameservers.data(), dns_ports.data())) { RING_WARN("Error setting SIP DNS servers: %s", sip_utils::sip_strerror(ret).c_str()); } else { if (auto ret = pjsip_endpt_set_resolver(endpt_, resv)) {