Python-ELMO is a Python library which offers an encapsulation of the binary tool ELMO, in order to manipulate it easily in Python and SageMath script.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

listeningthread.py 1.6KB

  1. from servicethread import PermanentServiceThread
  2. import socket
  3. class ListeningThread(PermanentServiceThread):
  4. def __init__(self, host, port, threadclass, **kwargs):
  5. super().__init__()
  6. self.hostname = host
  7. self.port = port
  8. self.threadclass = threadclass
  9. self.kwargs = kwargs
  10. def execute(self):
  11. self.tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  12. self.tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  13. self.tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
  14. # self.tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_ATTACH_REUSEPORT_CBPF, 1)
  15. self.tcpsock.bind((self.hostname, self.port))
  16. self.tcpsock.listen(5)
  17. print('[port][%s] Listening' % self.port)
  18. while self.is_running():
  19. try:
  20. (clientsocket, (ip, port)) = self.tcpsock.accept()
  21. print('[port][{}] Accepted: {} <=> {}'.format(
  22. self.port,
  23. clientsocket.getsockname(),
  24. clientsocket.getpeername(),
  25. ))
  26. newthread = self.threadclass(ip, port, clientsocket, **self.kwargs)
  27. newthread.start()
  28. except socket.timeout:
  29. pass
  30. def stop(self):
  31. super().stop()
  32. clientsocker = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  33. clientsocker.connect( (self.hostname, self.port) )
  34. self.tcpsock.close()
  35. print('[port][%s] Stop listening' % self.port)