Существует два способа использования SO_REUSEADDR:
привязка двух серверов к одному и тому же адресу (для производительности сервера)
привязка клиента затемсервер (например, для дырокола )
Кажется, что второй не работает на Linux (я тестировал на RedHat и Chromium OS), хотя онработает на macOS.
Я сделал этот маленький код:
import socket
conn = socket.create_connection(("google.fr", 80))
if len(conn.getsockname()) == 2:
family = socket.AF_INET
else:
family = socket.AF_INET6
s = socket.socket(family)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
s.bind(conn.getsockname())
Этот код работает на macOS, но не работает с OSError: [Errno 98] Address already in use
в противном случае.
Есть ли способ сделатьэто работает?Если нет, то откуда это поведение?