|
|
|
@ -63,7 +63,7 @@ def _wait_forever(server): |
|
|
|
|
|
|
|
|
|
def _run_server(bind_address): |
|
|
|
|
"""Start a server in a subprocess.""" |
|
|
|
|
logging.warning( '[PID {}] Starting new server.'.format( os.getpid())) |
|
|
|
|
logging.warning( '[PID {}] Starting new server.'.format(os.getpid())) |
|
|
|
|
options = (('grpc.so_reuseport', 1),) |
|
|
|
|
|
|
|
|
|
# WARNING: This example takes advantage of SO_REUSEPORT. Due to the |
|
|
|
@ -87,6 +87,8 @@ def _reserve_port(): |
|
|
|
|
"""Find and reserve a port for all subprocesses to use.""" |
|
|
|
|
sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) |
|
|
|
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) |
|
|
|
|
if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) != 1: |
|
|
|
|
raise RuntimeError("Failed to set SO_REUSEPORT.") |
|
|
|
|
sock.bind(('', 0)) |
|
|
|
|
try: |
|
|
|
|
yield sock.getsockname()[1] |
|
|
|
|