Сообщить об ошибке.

Функция socket() модуля socket, создает новый сокет в Python

Создает подключение к новому сокету

Синтаксис:

import socket

sock = socket.socket(family=AF_INET, type=SOCK_STREAM, 
                     proto=0, fileno=None)

Параметры:

  • family=AF_INET - семейство адресов,
  • type=SOCK_STREAM - тип сокета,
  • proto=0 - номер протокола,
  • fileno=None - дескриптор сокета.

Возвращаемое значение:

Описание:

Функция socket() модуля socket создает новый сокет, используя указанное семейство адресов family, тип сокета type и номер протокола proto.

  • Семейство адресов должно быть socket.AF_INET (по умолчанию), socket.AF_INET6, socket.AF_UNIX, socket.AF_CAN, socket.AF_PACKET или socket.AF_RDS.
  • Тип сокета должен быть socket.SOCK_STREAM (по умолчанию), socket.SOCK_DGRAM, socket.SOCK_RAW или, возможно, одна из других констант socket.SOCK_*.
  • Номер протокола обычно равен нулю и может быть опущен, или в случае, когда семейство адресов socket.AF_CAN, протокол должен быть одним из socket.CAN_RAW, socket.CAN_BCM, socket.CAN_ISOTP или socket.CAN_J1939.

Если указан аргумент fileno, то значения для аргументов family, type и proto автоматически определяются из указанного файлового дескриптора. Автоопределение можно отменить, вызвав функцию socket.socket() с явными аргументами family, type или proto.

Это влияет только на то, как Python представляет например, возвращаемое значение методом Socket.getpeername(), но не фактический ресурс ОС. В отличие от функции socket.fromfd(), fileno вернет тот же сокет, а не его дубликат, что может помочь закрыть отсоединенный сокет с помощью метода Socket.close().

Вновь созданный сокет не наследуется.

Изменено в Python 3.7: Добавлен протокол socket.CAN_ISOTP.

Изменено в Python 3.7: Когда битовые флаги socket.SOCK_NONBLOCK или socket.SOCK_CLOEXEC применяются к типу, они очищаются, и атрибут объекта сокета Socket.type не будет их отражать. Они по-прежнему передаются в базовый системный вызов socket.socket(). Следовательно,

sock = socket.socket(socket.AF_INET,
                     socket.SOCK_STREAM | socket.SOCK_NONBLOCK)

по-прежнему будет создавать неблокирующий сокет в операционных системах, поддерживающих socket.SOCK_NONBLOCK, но для атрибута объекта сокета Socket.type будет установлено значение socket.SOCK_STREAM.

Изменено в Python 3.9: Добавлен протокол CAN_J1939.

Изменено в Python 3.10: Добавлен протокол IPPROTO_MPTCP.

Пример создания сокета, ждущего подключения по IPv4.

# Echo server program
import socket

# Символическое имя, означающее
# Все доступные интерфейсы
HOST = ''
# Произвольный непривилегированный порт
PORT = 50007
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    sock.bind((HOST, PORT))
    sock.listen(1)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data: break
            conn.sendall(data)

Пример создания соединения через сокет для клиента.

# Echo client program
import socket

# Удаленный хост
HOST = '10.10.10.10'
# тот же порт, что и у сервера
PORT = 50007
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)
print('Received', repr(data))