Ejemplo n.º 1
0
 def run(self):
     while True:
         read_sockets, write_sockets, exception_sockets = self.grab_workers_rwe(
         )
         rlist, wlist, elist = yield Select(read_sockets, write_sockets,
                                            exception_sockets,
                                            self._select_timeout)
         self.handle_workers_rwe(rlist, wlist, elist)
Ejemplo n.º 2
0
    def run(self):
        self.running = True

        while self.running and core.running:
            try:
                # First, execute pending commands
                while len(self._pending_commands) > 0:
                    self._pending_commands.popleft()()

                # Now grab workers
                read_sockets = list(self._workers) + [self.pinger]
                write_sockets = [
                    worker for worker in self._workers if worker._ready_to_send
                ]
                exception_sockets = list(self._workers)

                if self.more_debugging:
                    log.debug("Select In : " + _format_lists(
                        read_sockets, write_sockets, exception_sockets))

                rlist, wlist, elist = yield Select(read_sockets, write_sockets,
                                                   exception_sockets,
                                                   self._select_timeout)

                if self.more_debugging:
                    log.debug("Select Out: " +
                              _format_lists(rlist, wlist, elist))

                if self.pinger in rlist:
                    self.pinger.pongAll()
                    rlist.remove(self.pinger)

                for worker in elist:
                    worker._do_exception(self)
                    if worker in rlist:
                        rlist.remove(worker)
                    if worker in wlist:
                        wlist.remove(worker)

                for worker in rlist:
                    worker._do_recv(self)

                for worker in wlist:
                    worker._do_send(self)

            except GeneratorExit:
                # Must be shutting down
                break
            except BaseException as e:
                log.exception(e)
                break
Ejemplo n.º 3
0
    def run(self):
        self.running = True
        while self.running:
            try:
                # First, execute pending commands
                while not self._pending_commands.empty():
                    self._pending_commands.get()()

                # Now grab workers
                read_sockets = list(self._workers) + [self.pinger]
                write_sockets = [
                    worker for worker in self._workers if worker._ready_to_send
                ]
                exception_sockets = list(self._workers)

                rlist, wlist, elist = yield Select(read_sockets, write_sockets,
                                                   exception_sockets,
                                                   self._select_timeout)

                if self.pinger in rlist:
                    self.pinger.pongAll()
                    rlist.remove(self.pinger)

                for worker in elist:
                    worker.close()
                    if worker in self._workers:
                        self._workers.remove(worker)

                for worker in rlist:
                    try:
                        data = worker.socket.recv(self._BUF_SIZE)
                        worker._push_receive_data(data)
                    except socket.error as (s_errno, strerror):
                        log.error("Socket error: " + strerror)
                        worker.close()
                        self._workers.discard(worker)

                for worker in wlist:
                    try:
                        l = worker.socket.send(worker.send_buf)
                        if l > 0:
                            worker._consume_send_buf(l)
                    except socket.error as (s_errno, strerror):
                        if s_errno != errno.EAGAIN:
                            log.error("Socket error: " + strerror)
                            worker.close()
                            self._workers.discard(worker)
Ejemplo n.º 4
0
 def run(self):
     while True:
         rr, ww, oo = yield Select(self.sock_to_iface.keys(), [], [])
         for r in rr:
             #data,addr = yield RecvFrom(sock, 65535)
             data, addr = r.recvfrom(65535)
             if addr[1] != RIP.RIP_PORT: continue
             #TODO: Check that source is on directly connected network
             addr = IPAddr(addr[0])
             data = RIP.rip(raw=data)
             if data.version != 2: continue
             iface = self.sock_to_iface[r]
             #print "<<<",iface, addr, data
             if data.command == RIP.RIP_REQUEST:
                 self.process_request(iface, addr, data)
             elif data.command == RIP.RIP_RESPONSE:
                 self.process_response(iface, addr, data)
                 self.sync_table()
Ejemplo n.º 5
0
 def _task_proc (self):
   #log.info("%s task starting", type(self).__name__)
   while core.running and self.running:
     rr,ww,xx = yield Select(self._clients, [], [], self.IO_TIMEOUT)
     for client in rr:
       client._do_rx()