From: Otto Moerbeek Date: Wed, 23 Oct 2019 09:44:10 +0000 (+0200) Subject: Merge pull request #8391 from omoerbeek/rec-out-of-order X-Git-Tag: dnsdist-1.4.0-rc4~8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c3227ece3af3bb1ead5c6ea712221fc48eb77106;p=pdns Merge pull request #8391 from omoerbeek/rec-out-of-order rec: Allow multiple simultaneous incoming TCP queries over a connection --- c3227ece3af3bb1ead5c6ea712221fc48eb77106 diff --cc regression-tests.recursor-dnssec/recursortests.py index 970565ad1,4db54049e..1b2f018aa --- a/regression-tests.recursor-dnssec/recursortests.py +++ b/regression-tests.recursor-dnssec/recursortests.py @@@ -659,9 -692,41 +694,41 @@@ distributor-threads={threads}""".format message = dns.message.from_wire(data) return message + @classmethod + def sendTCPQueries(cls, queries, timeout=2.0): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + if timeout: + sock.settimeout(timeout) + + sock.connect(("127.0.0.1", cls._recursorPort)) + data = [] + try: + for query in queries: + wire = query.to_wire() + sock.send(struct.pack("!H", len(wire))) + sock.send(wire) + for i in range(len(queries)): + try: + datalen = sock.recv(2) + if datalen: + (datalen,) = struct.unpack("!H", datalen) + data.append(sock.recv(datalen)) + except socket.timeout as e: + continue + except socket.error as e: + print("Network error: %s" % (str(e))) + data = None + finally: + sock.close() + + messages = [] + for d in data: + messages.append(dns.message.from_wire(d)) + return messages + def setUp(self): # This function is called before every tests - return + super(RecursorTest, self).setUp() ## Functions for comparisons def assertMessageHasFlags(self, msg, flags, ednsflags=[]):