Python 3.8+socketфункция
socket.create_server()
создание сокетов
Создаёт слушающий TCP-сокет одним вызовом: socket, SO_REUSEADDR, bind и listen вместе.
Синтаксис
srv = socket.create_server(address, *, family=AF_INET, backlog=None, reuse_port=False, dualstack_ipv6=False)
Главное, что он делает за вас, — SO_REUSEADDR на POSIX: без него перезапуск сервера сразу после остановки падает с «Address already in use», пока старые соединения в TIME_WAIT. На Windows опцию намеренно не ставит: там она разрешает чужому процессу занять тот же порт. Порт 0 — свободный порт выберет система, узнать его можно через getsockname(). Хост '' слушает все интерфейсы, '127.0.0.1' — только эту машину.
Примеры
import socket
with socket.create_server(('127.0.0.1', 0)) as srv:
host, port = srv.getsockname()
print(host, port > 0) # → 127.0.0.1 True
print(srv.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) != 0) # → ? True на Linux и macOS
import socket
# то же самое вручную — легко забыть setsockopt до bind
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv.bind(('127.0.0.1', 0))
srv.listen()
print(srv.type.name) # → SOCK_STREAM
srv.close()
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности