From 11e8b4d2fceca01375c947b687ea2aa354c24b32 Mon Sep 17 00:00:00 2001
From: Simonmicro <simon@simonmicro.de>
Date: Thu, 9 Dec 2021 18:01:23 +0100
Subject: [PATCH] Corrected SO_REUSEPORT behavior on unsupported platforms

---
 py-kms/pykms_Connect.py | 8 ++++++--
 py-kms/pykms_Server.py  | 5 +----
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/py-kms/pykms_Connect.py b/py-kms/pykms_Connect.py
index cf8b3dd..69492bc 100644
--- a/py-kms/pykms_Connect.py
+++ b/py-kms/pykms_Connect.py
@@ -4,6 +4,9 @@ import os
 import socket
 import selectors
 import ipaddress
+import logging
+from pykms_Format import pretty_printer
+loggersrv = logging.getLogger('logsrv')
 
 # https://github.com/python/cpython/blob/master/Lib/socket.py
 def has_dualstack_ipv6():
@@ -27,12 +30,13 @@ def create_server_sock(address, *, family = socket.AF_INET, backlog = None, reus
         
             *family*          should be either AF_INET or AF_INET6.
             *backlog*         is the queue size passed to socket.listen().
-            *reuse_port*      dictates whether to use the SO_REUSEPORT socket option.
+            *reuse_port*      if True and the platform supports it, we will use the SO_REUSEPORT socket option.
             *dualstack_ipv6*  if True and the platform supports it, it will create an AF_INET6 socket able to accept both IPv4 or IPv6 connections;
                               when False it will explicitly disable this option on platforms that enable it by default (e.g. Linux).
         """
         if reuse_port and not hasattr(socket._socket, "SO_REUSEPORT"):
-                raise ValueError("SO_REUSEPORT not supported on this platform")
+                pretty_printer(log_obj = loggersrv.warning, put_text = "{reverse}{yellow}{bold}SO_REUSEPORT not supported on this platform - ignoring socket option.{end}")
+                reuse_port = False
         
         if dualstack_ipv6:
                 if not has_dualstack_ipv6():
diff --git a/py-kms/pykms_Server.py b/py-kms/pykms_Server.py
index 60c74a5..cb131ee 100755
--- a/py-kms/pykms_Server.py
+++ b/py-kms/pykms_Server.py
@@ -13,7 +13,6 @@ import pickle
 import socketserver
 import queue as Queue
 import selectors
-from getpass import getuser
 from tempfile import gettempdir
 from time import monotonic as time
 
@@ -495,14 +494,12 @@ def server_create():
         all_address = [(
                         srv_config['ip'], srv_config['port'],
                         (srv_config['backlog_main'] if 'backlog_main' in srv_config else srv_options['backlog']['def']),
-                        (srv_config['reuse_main'] if 'reuse_main' in srv_config else False if getuser() == 'WDAGUtilityAccount' \
-                         else srv_options['reuse']['def'])
+                        (srv_config['reuse_main'] if 'reuse_main' in srv_config else srv_options['reuse']['def'])
                         )]
         log_address = "TCP server listening at %s on port %d" %(srv_config['ip'], srv_config['port'])
 
         if 'listen' in srv_config:
                 for l, b, r in zip(srv_config['listen'], srv_config['backlog'], srv_config['reuse']):
-                        r = (False if getuser() == 'WDAGUtilityAccount' else r)
                         all_address.append(l + (b,) + (r,))
                         log_address += justify("at %s on port %d" %(l[0], l[1]), indent = 56)