From 771b70d37656a731772c41c6bd8fdd3d33ddd692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matteo=20=E2=84=B1an?= Date: Tue, 21 Jul 2020 22:39:27 +0200 Subject: [PATCH] Fix for #58 --- .gitignore | 1 + py-kms/pykms_Server.py | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 621d21f..7520c95 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ pykms_logserver.log* pykms_logclient.log* pykms_newlines.txt* +pykms_clean_newlines.txt* pykms_config.pickle* etrigan.log* diff --git a/py-kms/pykms_Server.py b/py-kms/pykms_Server.py index 87ed373..5d6bfd5 100755 --- a/py-kms/pykms_Server.py +++ b/py-kms/pykms_Server.py @@ -40,7 +40,7 @@ class KeyServer(socketserver.ThreadingMixIn, socketserver.TCPServer): self.address_family = socket.AF_INET6 # This call make sure the server creates an IPv6 socket and NOT an IPv4 by default socketserver.TCPServer.__init__(self, server_address, RequestHandlerClass) self.__shutdown_request = False - self.r_service, self.w_service = os.pipe() + self.r_service, self.w_service = socket.socketpair() if hasattr(selectors, 'PollSelector'): self._ServerSelector = selectors.PollSelector @@ -68,7 +68,8 @@ class KeyServer(socketserver.ThreadingMixIn, socketserver.TCPServer): with self._ServerSelector() as selector: selector.register(fileobj = self, events = selectors.EVENT_READ) # self-pipe trick. - selector.register(fileobj = self.r_service, events = selectors.EVENT_READ) + selector.register(fileobj = self.r_service.fileno(), events = selectors.EVENT_READ) + selector.register(fileobj = self.w_service.fileno(), events = selectors.EVENT_WRITE) while not self.__shutdown_request: ready = selector.select(timeout) @@ -84,9 +85,9 @@ class KeyServer(socketserver.ThreadingMixIn, socketserver.TCPServer): for key, mask in ready: if key.fileobj is self: self._handle_request_noblock() - elif key.fileobj is self.r_service: + elif key.fileobj is self.r_service.fileno(): # only to clean buffer. - msgkill = os.read(self.r_service, 8).decode('utf-8') + msgkill = os.read(self.r_service.fileno(), 8).decode('utf-8') sys.exit(0) finally: self.__shutdown_request = False @@ -121,7 +122,7 @@ class server_thread(threading.Thread): self.is_running_thread.set() def terminate_eject(self): - os.write(self.server.w_service, u'☠'.encode('utf-8')) + os.write(self.server.w_service.fileno(), u'☠'.encode('utf-8')) def run(self): while not self.is_running_thread.is_set():