diff --git a/src/protocol/DnsMessage.cc b/src/protocol/DnsMessage.cc index baa037c9..f52f3166 100644 --- a/src/protocol/DnsMessage.cc +++ b/src/protocol/DnsMessage.cc @@ -184,7 +184,7 @@ void DnsMessage::set_question_name(const std::string& name) parser->question.qname = strdup(name.c_str()); } -std::atomic DnsRequest::req_id_; +std::atomic DnsRequest::req_id_(1); int DnsResponse::append(const void *buf, size_t *size) { diff --git a/src/protocol/DnsMessage.h b/src/protocol/DnsMessage.h index caf6f19b..a8c87b18 100644 --- a/src/protocol/DnsMessage.h +++ b/src/protocol/DnsMessage.h @@ -192,11 +192,14 @@ private: class DnsRequest : public DnsMessage { - static std::atomic req_id_; public: DnsRequest() { - dns_parser_set_id(req_id_++, this->parser); + uint64_t req_id; + do + req_id = DnsRequest::req_id_++; + while (req_id == 0); + dns_parser_set_id(req_id, this->parser); } DnsRequest(DnsRequest&& req) = default; @@ -206,6 +209,9 @@ public: { dns_parser_set_question(host, qtype, qclass, this->parser); } + +private: + static std::atomic req_id_; }; class DnsResponse : public DnsMessage