asyndns.py 文件源码

python
阅读 19 收藏 0 点赞 0 评论 0

项目:aquests 作者: hansroh 项目源码 文件源码
def pop_all (self):
        # DNS query maybe not allowed delay between request and send
        # maybe they just drop response packet for delaying
        with self.lock:
            queue, self.queue = self.queue [:], []

        count = len (queue)
        while queue:
            name, args = queue.pop (0)
            self.handler.handle_request (name, **args)

        if (not count and not self.has_job ()):
            return

        map = {}
        with self.lock:
            for client in self.udps:
                map [client._fileno] = client
        fds = list (map.keys ())

        # maybe 2 is enough
        safeguard = count * 2
        while self.has_job () and safeguard:
            safeguard -= 1
            asyncore.loop (0.1, map, count = 1)
            if safeguard % 5 == 0:
                self.maintern (time.time ())        
        self.maintern (time.time ())

        for fd in fds:
            if fd not in map:
                # resync 
                try: del asyncore.socket_map [fd]
                except KeyError: pass
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号