def run(self): while self.alive: p = select.poll() for af, sk in self.server.sockets: p.register(sk.fileno(), select.POLLIN) try: fds = p.poll(1000) except select.error, e: if e[0] == errno.EINTR: continue raise for fd, event in fds: if event & select.POLLIN == 0: continue for af, sk in self.server.sockets: if sk.fileno() == fd: break else: continue req, addr = sk.recvfrom(65536) try: pkt = proto.decodepacket(req) except proto.malformedpacket, inst: resp = proto.packet(inst.qid, ["resp"]) resp.rescode = proto.FORMERR sk.sendto(resp.encode(), addr) else: logger.debug("got request (%04x) from %s", pkt.qid, addr[0]) pkt.addr = (af,) + addr self.server.queuereq(pkt, dnsserver.socklistener.sender(addr, sk))
def squery(self, name, rtype): packet = proto.packet() try: if self.nsrecurse: packet.setflags(["recurse"]) except AttributeError: pass packet.addq(rec.rrhead(name, rtype)) return self.resolve(packet)
def squery(self, name, rtype): if type(name) == str: name = dn.fromstring(name) if not name.rooted: namelist = [name + prefix for prefix in self.prelist] + [name + dn.fromstring(".")] else: namelist = [name] for name in namelist: packet = proto.packet() packet.setflags(["recurse"]) packet.addq(rec.rrhead(name, rtype)) res = self.resolve(packet) if res.rescode == 0: break return res