Lines Matching refs:self

201     def __init__(self, server_address, RequestHandlerClass):
203 self.server_address = server_address
204 self.RequestHandlerClass = RequestHandlerClass
205 self.__is_shut_down = threading.Event()
206 self.__shutdown_request = False
208 def server_activate(self):
216 def serve_forever(self, poll_interval=0.5):
220 self.timeout. If you need to do periodic tasks, do them in
223 self.__is_shut_down.clear()
230 selector.register(self, selectors.EVENT_READ)
232 while not self.__shutdown_request:
235 if self.__shutdown_request:
238 self._handle_request_noblock()
240 self.service_actions()
242 self.__shutdown_request = False
243 self.__is_shut_down.set()
245 def shutdown(self):
252 self.__shutdown_request = True
253 self.__is_shut_down.wait()
255 def service_actions(self):
274 def handle_request(self):
277 Respects self.timeout.
280 # handle_request before self.timeout was available.
281 timeout = self.socket.gettimeout()
283 timeout = self.timeout
284 elif self.timeout is not None:
285 timeout = min(timeout, self.timeout)
292 selector.register(self, selectors.EVENT_READ)
297 return self._handle_request_noblock()
302 return self.handle_timeout()
304 def _handle_request_noblock(self):
312 request, client_address = self.get_request()
315 if self.verify_request(request, client_address):
317 self.process_request(request, client_address)
319 self.handle_error(request, client_address)
320 self.shutdown_request(request)
322 self.shutdown_request(request)
325 self.shutdown_request(request)
327 def handle_timeout(self):
328 """Called if no new request arrives within self.timeout.
334 def verify_request(self, request, client_address):
342 def process_request(self, request, client_address):
348 self.finish_request(request, client_address)
349 self.shutdown_request(request)
351 def server_close(self):
359 def finish_request(self, request, client_address):
361 self.RequestHandlerClass(request, client_address, self)
363 def shutdown_request(self, request):
365 self.close_request(request)
367 def close_request(self, request):
371 def handle_error(self, request, client_address):
384 def __enter__(self):
385 return self
387 def __exit__(self, *args):
388 self.server_close()
449 def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True):
451 BaseServer.__init__(self, server_address, RequestHandlerClass)
452 self.socket = socket.socket(self.address_family,
453 self.socket_type)
456 self.server_bind()
457 self.server_activate()
459 self.server_close()
462 def server_bind(self):
468 if self.allow_reuse_address and hasattr(socket, "SO_REUSEADDR"):
469 self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
470 if self.allow_reuse_port and hasattr(socket, "SO_REUSEPORT"):
471 self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
472 self.socket.bind(self.server_address)
473 self.server_address = self.socket.getsockname()
475 def server_activate(self):
481 self.socket.listen(self.request_queue_size)
483 def server_close(self):
489 self.socket.close()
491 def fileno(self):
497 return self.socket.fileno()
499 def get_request(self):
505 return self.socket.accept()
507 def shutdown_request(self, request):
515 self.close_request(request)
517 def close_request(self, request):
534 def get_request(self):
535 data, client_addr = self.socket.recvfrom(self.max_packet_size)
536 return (data, self.socket), client_addr
538 def server_activate(self):
542 def shutdown_request(self, request):
544 self.close_request(request)
546 def close_request(self, request):
560 def collect_children(self, *, blocking=False):
562 if self.active_children is None:
571 while len(self.active_children) >= self.max_children:
574 self.active_children.discard(pid)
577 self.active_children.clear()
582 for pid in self.active_children.copy():
588 self.active_children.discard(pid)
591 self.active_children.discard(pid)
595 def handle_timeout(self):
596 """Wait for zombies after self.timeout seconds of inactivity.
600 self.collect_children()
602 def service_actions(self):
607 self.collect_children()
609 def process_request(self, request, client_address):
614 if self.active_children is None:
615 self.active_children = set()
616 self.active_children.add(pid)
617 self.close_request(request)
624 self.finish_request(request, client_address)
627 self.handle_error(request, client_address)
630 self.shutdown_request(request)
634 def server_close(self):
636 self.collect_children(blocking=self.block_on_close)
643 def append(self, thread):
644 self.reap()
649 def pop_all(self):
650 self[:], result = [], self[:]
653 def join(self):
654 for thread in self.pop_all():
657 def reap(self):
658 self[:] = (thread for thread in self if thread.is_alive())
665 def append(self, thread):
668 def join(self):
684 def process_request_thread(self, request, client_address):
691 self.finish_request(request, client_address)
693 self.handle_error(request, client_address)
695 self.shutdown_request(request)
697 def process_request(self, request, client_address):
699 if self.block_on_close:
700 vars(self).setdefault('_threads', _Threads())
701 t = threading.Thread(target = self.process_request_thread,
703 t.daemon = self.daemon_threads
704 self._threads.append(t)
707 def server_close(self):
709 self._threads.join()
741 The handle() method can find the request as self.request, the
742 client address as self.client_address, and the server (in case it
743 needs access to per-server information) as self.server. Since a
749 def __init__(self, request, client_address, server):
750 self.request = request
751 self.client_address = client_address
752 self.server = server
753 self.setup()
755 self.handle()
757 self.finish()
759 def setup(self):
762 def handle(self):
765 def finish(self):
779 """Define self.rfile and self.wfile for stream sockets."""
798 def setup(self):
799 self.connection = self.request
800 if self.timeout is not None:
801 self.connection.settimeout(self.timeout)
802 if self.disable_nagle_algorithm:
803 self.connection.setsockopt(socket.IPPROTO_TCP,
805 self.rfile = self.connection.makefile('rb', self.rbufsize)
806 if self.wbufsize == 0:
807 self.wfile = _SocketWriter(self.connection)
809 self.wfile = self.connection.makefile('wb', self.wbufsize)
811 def finish(self):
812 if not self.wfile.closed:
814 self.wfile.flush()
819 self.wfile.close()
820 self.rfile.close()
827 def __init__(self, sock):
828 self._sock = sock
830 def writable(self):
833 def write(self, b):
834 self._sock.sendall(b)
838 def fileno(self):
839 return self._sock.fileno()
843 """Define self.rfile and self.wfile for datagram sockets."""
845 def setup(self):
847 self.packet, self.socket = self.request
848 self.rfile = BytesIO(self.packet)
849 self.wfile = BytesIO()
851 def finish(self):
852 self.socket.sendto(self.wfile.getvalue(), self.client_address)