diff --git a/examples/twisted/websocket/echo_multicore/server_reuseport.py b/examples/twisted/websocket/echo_multicore/server_reuseport.py index f187ca1a..f1ea7017 100644 --- a/examples/twisted/websocket/echo_multicore/server_reuseport.py +++ b/examples/twisted/websocket/echo_multicore/server_reuseport.py @@ -16,6 +16,7 @@ ## ############################################################################### +import sys import os import socket @@ -25,10 +26,32 @@ from autobahn.twisted.websocket import WebSocketServerProtocol, \ class CustomPort(tcp.Port): + + def __init__(self, port, factory, backlog = 50, interface = '', reactor = None, reuse = False): + tcp.Port.__init__(self, port, factory, backlog, interface, reactor) + self._reuse = reuse + + def createInternetSocket(self): s = tcp.Port.createInternetSocket(self) - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - #s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + + if self._reuse: + ## + ## reuse IP Port + ## + if 'bsd' in sys.platform or \ + sys.platform.startswith('linux') or \ + sys.platform.startswith('darwin'): + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + + elif sys.platform == 'win32': + ## on Windows, REUSEADDR already implies REUSEPORT + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + + else: + raise Exception("don't know how to set SO_RESUSEPORT on platform {}".format(sys.platform)) + return s @@ -68,7 +91,7 @@ if __name__ == '__main__': #reactor.listenTCP(9000, factory) - p = CustomPort(9000, factory) + p = CustomPort(9000, factory, reuse = True) p.startListening() print p