def __init__(self, server, server_address, address_family=socket.AF_INET6): self.server = server self.server_address = server_address self.address_family = address_family tryErr(self.setup_socket, server_address, Logger=self.logger, ErrorMsg=server_address)
def serve_forever(self): self.running = True self.final_init() while self.keepgoing: self.doing = "pre-schedule" self.pre_schedule() self.doing = "schedule" if len(self._sch): timeNow = time() while True: with self._schLock: if not len(self._sch): timeout = -1 break timeNext = self._sch.nextTime() if timeNow < timeNext: timeout = timeNext - timeNow break f = self._sch.shift() k = id(f) EH = None if k in self._schEH: EH = self._schEH[k] del self._schEH[k] try: f() except socket.error: if EH: tryErr(EH.handle_error) except: self.logger.error(traceback.format_exc()) if EH: tryErr(EH.handle_close) else: timeout = -1 self.doing = "poll" try: events = self._epoll.poll(timeout=timeout) except (IOError, select.error): continue except: self.logger.error(traceback.format_exc()) continue self.doing = "events" for (fd, e) in events: o = self._fd[fd] self.lastHandler = o try: if e & EPOLL_READ: o.handle_read() if e & EPOLL_WRITE: o.handle_write() except socket.error: tryErr(o.handle_error) except: self.logger.error(traceback.format_exc()) tryErr(o.handle_error) self.doing = None self.running = False
def serve_forever(self): self.running = True self.final_init() while self.keepgoing: self.doing = 'pre-schedule' self.pre_schedule() self.doing = 'schedule' if len(self._sch): timeNow = time() while True: with self._schLock: if not len(self._sch): timeout = -1 break timeNext = self._sch.nextTime() if timeNow < timeNext: timeout = timeNext - timeNow break f = self._sch.shift() k = id(f) EH = None if k in self._schEH: EH = self._schEH[k] del self._schEH[k] try: f() except socket.error: if EH: tryErr(EH.handle_error) except: self.logger.error(traceback.format_exc()) if EH: tryErr(EH.handle_close) else: timeout = -1 self.doing = 'poll' try: events = self._epoll.poll(timeout=timeout) except (IOError, select.error): continue except: self.logger.error(traceback.format_exc()) self.doing = 'events' for (fd, e) in events: o = self._fd[fd] self.lastHandler = o try: if e & EPOLL_READ: o.handle_read() if e & EPOLL_WRITE: o.handle_write() except socket.error: tryErr(o.handle_error) except: self.logger.error(traceback.format_exc()) tryErr(o.handle_error) self.doing = None self.running = False
def boot_all(self): conns = tuple(self.connections.values()) for c in conns: tryErr(lambda: c.boot())
def changeTask(self, f, t=None): tryErr(self.server.rmSchedule, self._Task, IgnoredExceptions=KeyError) if f: self._Task = self.server.schedule(f, t, errHandler=self) else: self._Task = None
def boot_all(self): for c in self.connections.values(): tryErr(lambda: c.boot())