如何更正由 class 中生成的进程引起的 'only one socket usage of each address error'?

How can I correct an 'only one socket usage of each address error' caused by a process being spawned within a class?

目前,我正在尝试开发一个服务器框架,它将消息从 twitch 传递到本地网络上的其他机器。我有一个名为服务器的 class,下面我有一个基本示例,它演示了我 运行 遇到的问题。问题是 twitch_socket 被创建了两次并绑定到 address/port。我的预期结果是套接字将在服务器 class 的子进程之间共享。我如何修改 class,甚至完全摆脱它,以便进程能够在它们之间共享套接字?

import multiprocessing
import socket
import re
from BotPass import PASSWORD
def send_message(socketobj, message):
    'Sends a str as bytes through socket'
     message = message.encode()
     socketobj.sendall(message)
def recv_message(socketobj):
    'Receives a str as bytes though socket'
    return socketobj.recv(2048).decode()
class Server:
    'Handles receiving messages from twitch and directs messages from clients'
    twitch_socket = socket.socket()
    twitch_socket.connect(('irc.chat.twitch.tv', 6667))
    send_message(twitch_socket, 'PASS %s\r\n' % (PASSWORD))
    send_message(twitch_socket, 'NICK %s\r\n' % ('squid_coin_bot'))
    send_message(twitch_socket, 'JOIN #jtv\r\n')
    send_message(twitch_socket, 'CAP REQ :twitch.tv/commands\r\n')
    server_socket = socket.socket()
    server_socket.bind(('', 9999))
    work_queue = multiprocessing.Queue()
    #Queue of messages from twitch
    worker_queue = multiprocessing.Queue()
    #Queue of free client socket objects
    result_queue = multiprocessing.Queue()
    #Queue of what to send back to twitch
    def start():
        accept_process = multiprocessing.Process(target=Server.accept_connections)
        # *This is most likely where the issue is occurring*
        accept_process.daemon = True
        accept_process.start()
    def accept_connections():
         ''
        Server.server_socket.listen(10)
        while 1:
            (clientsocket, clientaddr) = Server.server_socket.accept()
            # What I believe I am referencing here is the server socket which is inherent to the Server class
            if re.match(r'192\.168\.\d{1,3}\.\d{1,3}', clientaddr[0])\
             or clientaddr[0] == '127.0.0.1':
                Server.worker_queue.put(clientsocket)
            else:
                clientsocket.close()
Server.start()
input()

控制台输出:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Program Files\Python36\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "C:\Program Files\Python36\lib\multiprocessing\spawn.py", line 114, in _main
    prepare(preparation_data)
  File "C:\Program Files\Python36\lib\multiprocessing\spawn.py", line 225, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Program Files\Python36\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
    run_name="__mp_main__")
  File "C:\Program Files\Python36\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Program Files\Python36\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Program Files\Python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\twitch-market\server.py", line 18, in <module>
    class Server:
  File "C:\twitch-market\server.py", line 27, in Server
    server_socket.bind(('', 9999))
OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted

添加这个socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 这是因为之前的执行已经让socket处于TIME_WAIT状态,不能立即reused.the SO_REUSEADDR标志告诉内核在TIME_WAIT中重用一个本地socket状态,无需等待其自然超时到期。