Python Glossary English

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Сообщить о неточности