diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dns.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/dns.cpp b/src/dns.cpp index 9f99a5b49..b3f97caed 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -27,20 +27,22 @@ DNSRequest::DNSRequest(const Anope::string &addr, QueryType qt, bool cache, Modu return; } - DNSPacket *p = new DNSPacket(); - - while (DNSEngine->requests.count((p->id = GetRandomID()))); - - DNSEngine->requests[p->id] = this; - DNSEngine->packets.push_back(p); - + DNSPacket *p = new DNSPacket(); p->flags = DNS_QUERYFLAGS_RD; + if (!p->AddQuestion(addr, qt)) { + Log() << "Resolver: Unable to lookup host " << addr << " of type " << qt << " - internal error"; + delete p; delete this; return; } + while (DNSEngine->requests.count((p->id = GetRandomID()))); + + DNSEngine->requests[p->id] = this; + DNSEngine->packets.push_back(p); + SocketEngine->MarkWritable(DNSEngine->sock); this->timeout = new DNSRequestTimeout(this, Config->DNSTimeout); |