Поддержка указанного типа сокетов в этом семействе адресов отсутствует

Обновлено: 04.07.2024

В зависимости от системы и параметров сборки модуль socket поддерживает различные семейства сокетов, которые заданы как константы модуля.

Формат адреса, необходимый для конкретного объекта сокета Socket , выбирается автоматически на основе семейства адресов, указанного при создании объекта сокета.

Если использовать имя хоста в части хоста адреса сокета IPv4/v6, программа может показывать недетерминированное поведение, поскольку Python использует первый адрес, возвращенный из разрешения DNS. Адрес сокета будет по-разному преобразован в фактический адрес IPv4/v6, в зависимости от результатов разрешения DNS и/или конфигурации хоста. Для детерминированного поведения используйте числовой адрес в части хоста.

Все ошибки вызывают исключения. Могут возникать обычные исключения для недопустимых типов аргументов и условий нехватки памяти. Начиная с Python 3.3, ошибки, связанные с семантикой сокета или адреса, вызывают OSError или один из его подклассов.

Неблокирующий режим поддерживается через метод объекта сокета Socket.setblocking() . Обобщение этого режима на основе тайм-аутов поддерживается через Socket.settimeout() .

Содержание:

Адрес сокета socket.AF_UNIX .

Адрес сокета socket.AF_UNIX , привязанного к узлу файловой системы, представлен в виде строки с использованием кодировки файловой системы и обработчика ошибок surrogateescape .

Адрес в абстрактном пространстве имен Linux возвращается как байтовый объект с начальным нулевым байтом. Обратите внимание, что сокеты в этом пространстве имен могут взаимодействовать с обычными сокетами файловой системы, поэтому программам, предназначенным для работы в Linux, может потребоваться иметь дело с обоими типами адресов.

Строковый или байтовый объект может использоваться для любого типа адреса при передаче его в качестве аргумента.

Семейство адресов сокета socket.AF_INET .

Для семейства адресов socket.AF_INET используется парный кортеж (host, port) , где:

Для адресов IPv4 вместо адреса хоста принимаются две специальные формы:

Такое поведение несовместимо с IPv6, поэтому необходимо избегать этого, если собираетесь поддерживать IPv6 в своих программах Python.

Семейство адресов сокета socket.AF_INET6 .

Для семейства адресов socket.AF_INET6 используется кортеж (host, port, flowinfo, scope_id) , где: flowinfo и scope_id - представляют члены sin6_flowinfo и sin6_scope_id в структуре sockaddr_in6 в языке C. Для методов flowinfo и scope_id модуля сокета языка C, могут быть опущены только для обратной совместимости.

Обратите внимание,что пропуск scope_id может вызвать проблемы при манипулировании IPv6-адресами с областью действия.

Изменено в Python 3.7: для многоадресных адресов со значением scope_id , адрес может не содержать части %scope_id или идентификатора зоны. Эта информация является излишней и может быть безопасно опущена (рекомендуется).

Семейство адресов сокета socket.AF_NETLINK .

Для семейства адресов socket.AF_NETLINK используется парный кортеж (pid, groups) .

Семейство адресов сокета socket.AF_TIPC .

С использованием семейства адресов socket.AF_TIPC (только для Linux) доступна поддержка TIPC.

TIPC - это открытый сетевой протокол, не основанный на IP, разработанный для использования в кластерных компьютерных средах.

Адреса представлены кортежем, а поля зависят от типа адреса. Общая форма кортежа (addr_type, v1, v2, v3 [, scope]) , где:

  • addr_type - может быть одним из констант модуля:
    • Если addr_type=socket.TIPC_ADDR_NAME , то v1 - это тип сервера, v2 - идентификатор порта, а v3 должен быть 0.
    • Если addr_type=socket.TIPC_ADDR_NAMESEQ , то v1 - это тип сервера, v2 - нижний номер порта, а v3 - верхний номер порта.
    • Если addr_type=socket.TIPC_ADDR_ID , тогда v1 - это узел, v2 - ссылка, а v3 должно быть установлено в 0.

    Семейство адресов сокета socket.AF_CAN .

    Протокол socket.CAN_ISOTP требует кортежа (interface, rx_addr, tx_addr) , где оба дополнительных параметра представляют собой длинное целое число без знака, представляющее стандартный или расширенный идентификатор CAN.

    Протокол socket.CAN_J1939 требует кортежа (interface, name, pgn, addr) , где дополнительными параметрами являются:

    Протокол socket.SYSPROTO_CONTROL .

    Для протокола socket.SYSPROTO_CONTROL семейства socket.PF_SYSTEM используется cтрока или кортеж:

    Сокеты Bluetooth socket.AF_BLUETOOTH .

    Сокет Bluetooth socket.AF_BLUETOOTH поддерживает следующие протоколы и форматы адресов:

    Сокет socket.AF_ALG , функции криптографии ядра.

    Сокет socket.AF_ALG - это интерфейс на основе сокетов только для Linux для криптографии ядра. Сокет алгоритма конфигурируется с кортежем из двух-четырех элементов (type, name [, feat [, mask]]) , где:

    • type - это тип алгоритма в виде строки, например aead , hash , skcipher или rng .
    • name - это имя алгоритма и режим работы в виде строки, например sha256 , hmac(sha256) , cbc(aes) или drbg_nopr_ctr_aes256 .
    • feat и mask - 32-битные целые числа без знака.

    Доступность: Linux 2.6.38, для некоторых типов алгоритмов требуются более свежие ядра.

    Новое в Python 3.6.

    Сокеты socket.AF_VSOCK , связь между виртуальными машинами.

    Сокет socket.AF_VSOCK разрешает связь между виртуальными машинами и их хостами.

    Сокет представлен как парный кортеж (CID, port) , где идентификатор контекста или CID и port являются целыми числами.

    Доступность: Linux >= 4.8 QEMU >= 2.8 ESX >= 4.0 ESX Workstation >= 6.5.

    Новое в Python 3.7.

    Сокет socket.AF_PACKET , низкоуровневая связь сетевым устройствам.

    Сокет socket.AF_PACKET - это низкоуровневый интерфейс непосредственно к сетевым устройствам. Пакеты представлены кортежем (ifname, proto [, pkttype [, hatype [, addr]]]) , где:

    • ifname - строка, определяющая имя устройства.
    • proto - целое число в сетевом порядке байтов, указывающее номер протокола Ethernet.
    • pkttype - необязательное целое число, указывающее тип пакета:
      • socket.PACKET_HOST (по умолчанию) - пакет, адресованный локальному хосту.
      • socket.PACKET_BROADCAST - широковещательный пакет физического уровня.
      • socket.PACKET_MULTIHOST - пакет, отправленный на групповой адрес физического уровня.
      • socket.PACKET_OTHERHOST - пакет на другой хост, который был перехвачен драйвером устройства в неразборчивом режиме.
      • socket.PACKET_OUTGOING - пакет, исходящий от локального хоста, который возвращается в пакетный сокет.

      Сокет Qualcomm socket.AF_QIPCRTR .

      Сокет socket.AF_QIPCRTR - это интерфейс на основе сокетов только для Linux для связи со службами, работающими на сопроцессорах платформ Qualcomm.

      Семейство адресов представлено в виде кортежа (node, port) , где node и port являются неотрицательными целыми числами.

      Новое в Python 3.8.

      Сокет socket.IPPROTO_UDPLITE .

      Сокет socket.IPPROTO_UDPLITE - это вариант UDP, который позволяет указать, какая часть пакета покрывается контрольной суммой. Он добавляет два параметра сокета, которые можно изменить.

      • self.setsockopt(IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV, length) изменит, какая часть исходящих пакетов покрывается контрольной суммой,
      • self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length) отфильтрует пакеты, которые покрывают слишком мало данных.

      В обоих случаях длина length должна быть в диапазоне range(8, 2**16, 8) .

      Разбей их по категориям (выбери касающиеся тебя) и через Case поймешь разорвано соединение или оно не установилось.

      Добавлено 07.07.05, 12:19
      А зачем тебе при неустановившемся соединении получать -1, а при разрыве выходить из программы. Не проще ли написать процедуру которая ожидает соединение и возобнавляет если оно разорвалось?



      Добавлено 07.07.05, 20:17
      Ну вобщем то я был прав

      Len := FormatMessage(FORMAT_MESSAGE_FROM_HMODULE or FORMAT_MESSAGE_IGNORE_INSERTS or

      В случае успеха функция WSAStartup возвращает нулевое значение. Если происходит ошибка, возвращается одно из следующих значений:
      WSASYSNOTREADY Сетевое программное обеспечение не готово для работы
      WSAVERNOTSUPPORTED Функция не поддерживается данной реализацией интерфейса Windows Sockets
      WSAEINVAL Библиотека DLL, обеспечивающая интерфейсe Windows Sockets, не соответствуетверсии, указанной приложением указанной в параметре wVersionRequested

      Если ошибка возникла при выполнении функции WSACleanup , функция WSAGetLastError может вернуть одно из следующих значений:Значение Описание
      WSANOTINITIALISED Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup
      WSAENETDOWN Сбой сетевого программного обеспечения
      WSAEINPROGRESS Во время вызыва функции WSACleanup выполнялась одна из блокирующих функций интерфейса Windows Sockets

      В случае успеха функция socket возвращает дескриптор, который нужно использовать для выполнения всех операций над данным сокетом. Если же произошла ошибка, эта функция возвращает значение INVALID_SOCKET . Для анализа причины ошибки вы должны вызвать функцию WSAGetLastError , которая в данном случае может вернуть один из следующих кодов ошибки:
      WSANOTINITIALISED Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup
      WSAENETDOWN Сбой сетевого программного обеспечения
      WSAEAFNOSUPPORT Указан неправильный тип адреса
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAEMFILE Израсходован весь запас свободных дескрипторов
      WSAENOBUFS Нет памяти для создания буфера
      WSAEPROTONOSUPPORT Указан неправильный протокол
      WSAEPROTOTYPE Указанный протокол несовместим с данным типом сокета
      WSAESOCKTNOSUPPORT Указанный тип сокета несовместим с данным типом адреса

      Для освобождения ресурсов приложение должно закрывать сокеты, которые ему больше не нужны, вызывая функцию closesocket, коды ошибок для этой функции:
      WSANOTINITIALISED Перед использованием функции closesocket необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAENOTSOCK Указанный в параметре дескриптор не является сокетом
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall

      В случае ошибки функция bind возвращает значение SOCKET_ERROR . Дальнейший анализ причин ошибки следует выполнять при помощи функции WSAGetLastError . Возможные коды ошибок перечислены ниже:
      WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAEADDRINUSE Указанный адрес уже используется
      WSAEFAULT Значение параметра namelen меньше размера структуры sockaddr
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAEAFNOSUPPORT Этот протокол не может работать с указанным семейством адресов
      WSAEINVAL Сокет уже привязан к адресу
      WSAENOBUFS Установлено слишком много соединений
      WSAENOTSOCK Указанный в параметре дескриптор не является сокетом

      Ниже мы привели список возможных кодов ошибок для функции listen:
      WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAEADDRINUSE Указанный адрес уже используется
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAEINVAL Сокет еще не был привязан к адресу или уже находится в подключенном состоянии
      WSAEISCONN Сокет уже находится в подключенном состоянии
      WSAEMFILE Недостаточно дескрипторов файлов
      WSAENOBUFS Нет места для размещения буфера
      WSAENOTSOCK Указанный в параметре дескриптор не является сокетом
      WSAEOPNOTSUPP Функция listen не работает с сокетом указанного типа

      Приведем список возможных кодов ошибок для функции accept:
      WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAEFAULT Значение параметра addrlen меньше размера структуры адреса
      WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAEINVAL Перед вызовом функции accept не была вызывана функция listen
      WSAEMFILE Нет доступных дескрипторов
      WSAENOBUFS Установлено слишком много соединений
      WSAENOTSOCK Указанный в параметре дескриптор не является сокетом
      WSAEOPNOTSUPP Данный тип сокета нельзя использовать при вызове функций, ориентированных на работу с каналом связи
      WSAEWOULDBLOCK Сокет отмечен как неблокирующий и в настоящее время нет каналов связи, которые нужно устанавливать

      Приведем список кодов ошибок, которые могут возникать при вызове команды send:
      WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAEACCES Указанный адрес является широковещательным (broadcast), однако перед вызовом функции не был установлен соответствующий флаг
      WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAEFAULT Параметр buf указан неправильно (он не указывает на адресное пространство, принадлежащее приложению)
      WSAENETRESET Необходимо сбросить соединение
      WSAENOBUFS Возникла блокировка буфера
      WSAENOTCONN Сокет не подсоединен
      WSAENOTSOCK Указанный в параметре дескриптор не является сокетом
      WSAESHUTDOWN Сокет был закрыт функцией shutdown
      WSAEWOULDBLOCK Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке
      WSAEMSGSIZE Был использован сокет типа SOCK_DGRAM (предназначенный для передачи датаграмм). При этом размер пакета данных превышает максимально допустимый для данной реализации интерфейса Windows Sockets
      WSAEINVAL Сокет не был подключен функцией bind
      WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине
      WSAECONNRESET Сброс соединения удаленным узлом

      При выполнении функции recv могут возникать следующие ошибки:
      WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAENOTCONN Сокет не подсоединен
      WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAENOTSOCK Указанный в параметре дескриптор не является сокетом
      WSAESHUTDOWN Сокет был закрыт функцией shutdown
      WSAEWOULDBLOCK Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке
      WSAEMSGSIZE Размер пакета данных превышает размер буфера, в результате чего принятый пакет был обрезан
      WSAEINVAL Сокет не был подключен функцией bind
      WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине
      WSAECONNRESET Сброс соединения удаленным узлом

      Если функция WSAAsyncSelect выполнилась успешно, она возвращает нулевое значение, при ошибке - значение SOCKET_ERROR. В зависимости от значения последнего параметра могут возникать разные коды ошибки, которые можно получить при помощи функции WSAGetLastError. Следующие ошибки могут возникнуть при любом значении параметра:
      WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAEINVAL Сокет не был подключен функцией bind
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets

      Дополнительный код ошибки можно получить из параметра lParam при помощи макрокоманды WSAGETSELECTERROR.
      При использовании параметра FD_CONNECT возможно появление следующих ошибок:
      WSAEADDRINUSE Указанный адрес уже используется
      WSAEADDRNOTAVAIL Указанный адрес не доступен
      WSAEAFNOSUPPORT Для данного сокета нельзя использовать указанное семейство адресов
      WSAECONNREFUSED Попытка установления канала связи была отвергнута
      WSAEDESTADDRREQ Необходимо указать адрес получателя пакета
      WSAEFAULT Неправильно указан параметр namelen
      WSAEINVAL Сокет уже подключен к адресу
      WSAEISCONN Сокет уже подсоединен
      WSAEMFILE Больше нет доступных дескрипторов
      WSAENETUNREACH Из данного узла и в данное время невозможно получить доступ к сети
      WSAENOBUFS Нет места для размещения буфера
      WSAENOTCONN Сокет на подключен
      WSAENOTSOCK Указан дескриптор файла, а не сокета
      WSAETIMEDOUT При попытке установления канала связи возникла задержка во времени

      Если используется параметр FD_CLOSE, может возникнуть одна из следующих ошибок:
      WSAENETDOWN Сбой в сети
      WSAECONNRESET Сброс соединения удаленным узлом
      WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине

      Ниже мы привели возможные коды ошибок для функции recv from:
      WSANOTINITIALISED Перед использованием функции необходимо вызвать функцию WSAStartup
      WSAENETDOWN Сбой в сети
      WSAEFAULT Слишком малое значение параметра, определяющего размер буфера для приема данных
      WSAEINTR Работа функции была отменена при помощи функции WSACancelBlockingCall
      WSAEINPROGRESS Выполняется блокирующая функция интерфейса Windows Sockets
      WSAEINVAL Сокет не был подключен функцией bind
      WSAENOTSOCK Указанный дескриптор не является дескриптором сокета
      WSAESHUTDOWN Сокет был закрыт функцией shutdown
      WSAEWOULDBLOCK Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке
      WSAEMSGSIZE Размер датаграммы слишком большой, поэтому соответствующий блок данных не помещается в буфер. Принятый блок данных был обрезан
      WSAECONNABORTED Сбой из-за слишком большой задержки или по другой причине
      WSAECONNRESET Сброс соединения удаленным узлом


      ---
      По материалам © Александр Фролов, Григорий Фролов
      Том 23, М.: Диалог-МИФИ, 1993, 283 стр.

      В зависимости от системы и параметров сборки модуль socket поддерживает различные семейства сокетов, которые заданы как константы модуля.

      Формат адреса, необходимый для конкретного объекта сокета Socket , выбирается автоматически на основе семейства адресов, указанного при создании объекта сокета.

      Если использовать имя хоста в части хоста адреса сокета IPv4/v6, программа может показывать недетерминированное поведение, поскольку Python использует первый адрес, возвращенный из разрешения DNS. Адрес сокета будет по-разному преобразован в фактический адрес IPv4/v6, в зависимости от результатов разрешения DNS и/или конфигурации хоста. Для детерминированного поведения используйте числовой адрес в части хоста.

      Все ошибки вызывают исключения. Могут возникать обычные исключения для недопустимых типов аргументов и условий нехватки памяти. Начиная с Python 3.3, ошибки, связанные с семантикой сокета или адреса, вызывают OSError или один из его подклассов.

      Неблокирующий режим поддерживается через метод объекта сокета Socket.setblocking() . Обобщение этого режима на основе тайм-аутов поддерживается через Socket.settimeout() .

      Содержание:

      Адрес сокета socket.AF_UNIX .

      Адрес сокета socket.AF_UNIX , привязанного к узлу файловой системы, представлен в виде строки с использованием кодировки файловой системы и обработчика ошибок surrogateescape .

      Адрес в абстрактном пространстве имен Linux возвращается как байтовый объект с начальным нулевым байтом. Обратите внимание, что сокеты в этом пространстве имен могут взаимодействовать с обычными сокетами файловой системы, поэтому программам, предназначенным для работы в Linux, может потребоваться иметь дело с обоими типами адресов.

      Строковый или байтовый объект может использоваться для любого типа адреса при передаче его в качестве аргумента.

      Семейство адресов сокета socket.AF_INET .

      Для семейства адресов socket.AF_INET используется парный кортеж (host, port) , где:

      Для адресов IPv4 вместо адреса хоста принимаются две специальные формы:

      Такое поведение несовместимо с IPv6, поэтому необходимо избегать этого, если собираетесь поддерживать IPv6 в своих программах Python.

      Семейство адресов сокета socket.AF_INET6 .

      Для семейства адресов socket.AF_INET6 используется кортеж (host, port, flowinfo, scope_id) , где: flowinfo и scope_id - представляют члены sin6_flowinfo и sin6_scope_id в структуре sockaddr_in6 в языке C. Для методов flowinfo и scope_id модуля сокета языка C, могут быть опущены только для обратной совместимости.

      Обратите внимание,что пропуск scope_id может вызвать проблемы при манипулировании IPv6-адресами с областью действия.

      Изменено в Python 3.7: для многоадресных адресов со значением scope_id , адрес может не содержать части %scope_id или идентификатора зоны. Эта информация является излишней и может быть безопасно опущена (рекомендуется).

      Семейство адресов сокета socket.AF_NETLINK .

      Для семейства адресов socket.AF_NETLINK используется парный кортеж (pid, groups) .

      Семейство адресов сокета socket.AF_TIPC .

      С использованием семейства адресов socket.AF_TIPC (только для Linux) доступна поддержка TIPC.

      TIPC - это открытый сетевой протокол, не основанный на IP, разработанный для использования в кластерных компьютерных средах.

      Адреса представлены кортежем, а поля зависят от типа адреса. Общая форма кортежа (addr_type, v1, v2, v3 [, scope]) , где:

      • addr_type - может быть одним из констант модуля:
        • Если addr_type=socket.TIPC_ADDR_NAME , то v1 - это тип сервера, v2 - идентификатор порта, а v3 должен быть 0.
        • Если addr_type=socket.TIPC_ADDR_NAMESEQ , то v1 - это тип сервера, v2 - нижний номер порта, а v3 - верхний номер порта.
        • Если addr_type=socket.TIPC_ADDR_ID , тогда v1 - это узел, v2 - ссылка, а v3 должно быть установлено в 0.

        Семейство адресов сокета socket.AF_CAN .

        Протокол socket.CAN_ISOTP требует кортежа (interface, rx_addr, tx_addr) , где оба дополнительных параметра представляют собой длинное целое число без знака, представляющее стандартный или расширенный идентификатор CAN.

        Протокол socket.CAN_J1939 требует кортежа (interface, name, pgn, addr) , где дополнительными параметрами являются:

        Протокол socket.SYSPROTO_CONTROL .

        Для протокола socket.SYSPROTO_CONTROL семейства socket.PF_SYSTEM используется cтрока или кортеж:

        Сокеты Bluetooth socket.AF_BLUETOOTH .

        Сокет Bluetooth socket.AF_BLUETOOTH поддерживает следующие протоколы и форматы адресов:

        Сокет socket.AF_ALG , функции криптографии ядра.

        Сокет socket.AF_ALG - это интерфейс на основе сокетов только для Linux для криптографии ядра. Сокет алгоритма конфигурируется с кортежем из двух-четырех элементов (type, name [, feat [, mask]]) , где:

        • type - это тип алгоритма в виде строки, например aead , hash , skcipher или rng .
        • name - это имя алгоритма и режим работы в виде строки, например sha256 , hmac(sha256) , cbc(aes) или drbg_nopr_ctr_aes256 .
        • feat и mask - 32-битные целые числа без знака.

        Доступность: Linux 2.6.38, для некоторых типов алгоритмов требуются более свежие ядра.

        Новое в Python 3.6.

        Сокеты socket.AF_VSOCK , связь между виртуальными машинами.

        Сокет socket.AF_VSOCK разрешает связь между виртуальными машинами и их хостами.

        Сокет представлен как парный кортеж (CID, port) , где идентификатор контекста или CID и port являются целыми числами.

        Доступность: Linux >= 4.8 QEMU >= 2.8 ESX >= 4.0 ESX Workstation >= 6.5.

        Новое в Python 3.7.

        Сокет socket.AF_PACKET , низкоуровневая связь сетевым устройствам.

        Сокет socket.AF_PACKET - это низкоуровневый интерфейс непосредственно к сетевым устройствам. Пакеты представлены кортежем (ifname, proto [, pkttype [, hatype [, addr]]]) , где:

        • ifname - строка, определяющая имя устройства.
        • proto - целое число в сетевом порядке байтов, указывающее номер протокола Ethernet.
        • pkttype - необязательное целое число, указывающее тип пакета:
          • socket.PACKET_HOST (по умолчанию) - пакет, адресованный локальному хосту.
          • socket.PACKET_BROADCAST - широковещательный пакет физического уровня.
          • socket.PACKET_MULTIHOST - пакет, отправленный на групповой адрес физического уровня.
          • socket.PACKET_OTHERHOST - пакет на другой хост, который был перехвачен драйвером устройства в неразборчивом режиме.
          • socket.PACKET_OUTGOING - пакет, исходящий от локального хоста, который возвращается в пакетный сокет.

          Сокет Qualcomm socket.AF_QIPCRTR .

          Сокет socket.AF_QIPCRTR - это интерфейс на основе сокетов только для Linux для связи со службами, работающими на сопроцессорах платформ Qualcomm.

          Семейство адресов представлено в виде кортежа (node, port) , где node и port являются неотрицательными целыми числами.

          Новое в Python 3.8.

          Сокет socket.IPPROTO_UDPLITE .

          Сокет socket.IPPROTO_UDPLITE - это вариант UDP, который позволяет указать, какая часть пакета покрывается контрольной суммой. Он добавляет два параметра сокета, которые можно изменить.

          • self.setsockopt(IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV, length) изменит, какая часть исходящих пакетов покрывается контрольной суммой,
          • self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length) отфильтрует пакеты, которые покрывают слишком мало данных.

          В обоих случаях длина length должна быть в диапазоне range(8, 2**16, 8) .

          Сокеты (англ. socket — разъём) — название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет — абстрактный объект, представляющий конечную точку соединения.

          Принципы сокетов¶

          Каждый процесс может создать слушающий сокет (серверный сокет) и привязать его к какому-нибудь порту операционной системы (в UNIX непривилегированные процессы не могут использовать порты меньше 1024). Слушающий процесс обычно находится в цикле ожидания, то есть просыпается при появлении нового соединения. При этом сохраняется возможность проверить наличие соединений на данный момент, установить тайм-аут для операции и т.д.

          Каждый сокет имеет свой адрес. ОС семейства UNIX могут поддерживать много типов адресов, но обязательными являются INET-адрес и UNIX-адрес. Если привязать сокет к UNIX-адресу, то будет создан специальный файл (файл сокета) по заданному пути, через который смогут сообщаться любые локальные процессы путём чтения/записи из него (см. Доменный сокет Unix). Сокеты типа INET доступны из сети и требуют выделения номера порта.

          Обычно клиент явно подсоединяется к слушателю, после чего любое чтение или запись через его файловый дескриптор будут передавать данные между ним и сервером.

          Основные функции¶

          socket()¶

          Создаёт конечную точку соединения и возвращает файловый дескриптор. Принимает три аргумента:

          domain указывающий семейство протоколов создаваемого сокета

          • AF_INET для сетевого протокола IPv4
          • AF_INET6 для IPv6
          • AF_UNIX для локальных сокетов (используя файл)

          type

          • SOCK_STREAM (надёжная потокоориентированная служба (сервис) или потоковый сокет)
          • SOCK_DGRAM (служба датаграмм или датаграммный сокет)
          • SOCK_RAW (Сырой сокет — сырой протокол поверх сетевого уровня).

          protocol

          Протоколы обозначаются символьными константами с префиксом IPPROTO_* (например, IPPROTO_TCP или IPPROTO_UDP). Допускается значение protocol=0 (протокол не указан), в этом случае используется значение по умолчанию для данного вида соединений.

          Функция возвращает −1 в случае ошибки. Иначе, она возвращает целое число, представляющее присвоенный дескриптор.

          Пример на Python

          Связывает сокет с конкретным адресом. Когда сокет создается при помощи socket(), он ассоциируется с некоторым семейством адресов, но не с конкретным адресом. До того как сокет сможет принять входящие соединения, он должен быть связан с адресом. bind() принимает три аргумента:

          1. sockfd — дескриптор, представляющий сокет при привязке
          2. serv_addr — указатель на структуру sockaddr, представляющую адрес, к которому привязываем.
          3. addrlen — поле socklen_t, представляющее длину структуры sockaddr.

          Возвращает 0 при успехе и −1 при возникновении ошибки.

          Пример на Python

          Автоматическое получение имени хоста.

          listen()¶

          Подготавливает привязываемый сокет к принятию входящих соединений. Данная функция применима только к типам сокетов SOCK_STREAM и SOCK_SEQPACKET. Принимает два аргумента:

          1. sockfd — корректный дескриптор сокета.
          2. backlog — целое число, означающее число установленных соединений, которые могут быть обработаны в любой момент времени. Операционная система обычно ставит его равным максимальному значению.

          После принятия соединения оно выводится из очереди. В случае успеха возвращается 0, в случае возникновения ошибки возвращается −1.

          Пример на Python

          accept()¶

          Используется для принятия запроса на установление соединения от удаленного хоста. Принимает следующие аргументы:

          1. sockfd — дескриптор слушающего сокета на принятие соединения.
          2. cliaddr — указатель на структуру sockaddr, для принятия информации об адресе клиента.
          3. addrlen — указатель на socklen_t, определяющее размер структуры, содержащей клиентский адрес и переданной в accept(). Когда accept() возвращает некоторое значение, socklen_t указывает сколько байт структуры cliaddr использовано в данный момент.

          Функция возвращает дескриптор сокета, связанный с принятым соединением, или −1 в случае возникновения ошибки.

          Пример на Python

          connect()¶

          Устанавливает соединение с сервером.

          Некоторые типы сокетов работают без установления соединения, это в основном касается UDP-сокетов. Для них соединение приобретает особое значение: цель по умолчанию для посылки и получения данных присваивается переданному адресу, позволяя использовать такие функции как send() и recv() на сокетах без установления соединения.

          Загруженный сервер может отвергнуть попытку соединения, поэтому в некоторых видах программ необходимо предусмотреть повторные попытки соединения.

          Возвращает целое число, представляющее код ошибки: 0 означает успешное выполнение, а −1 свидетельствует об ошибке.

          Пример на Python

          Передача данных¶

          Для передачи данных можно пользоваться стандартными функциями чтения/записи файлов read и write, но есть специальные функции для передачи данных через сокеты:

          Сокеты (англ. socket — разъём) — название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет — абстрактный объект, представляющий конечную точку соединения.

          Принципы сокетов¶

          Каждый процесс может создать слушающий сокет (серверный сокет) и привязать его к какому-нибудь порту операционной системы (в UNIX непривилегированные процессы не могут использовать порты меньше 1024). Слушающий процесс обычно находится в цикле ожидания, то есть просыпается при появлении нового соединения. При этом сохраняется возможность проверить наличие соединений на данный момент, установить тайм-аут для операции и т.д.

          Каждый сокет имеет свой адрес. ОС семейства UNIX могут поддерживать много типов адресов, но обязательными являются INET-адрес и UNIX-адрес. Если привязать сокет к UNIX-адресу, то будет создан специальный файл (файл сокета) по заданному пути, через который смогут сообщаться любые локальные процессы путём чтения/записи из него (см. Доменный сокет Unix). Сокеты типа INET доступны из сети и требуют выделения номера порта.

          Обычно клиент явно подсоединяется к слушателю, после чего любое чтение или запись через его файловый дескриптор будут передавать данные между ним и сервером.

          Основные функции¶

          socket()¶

          Создаёт конечную точку соединения и возвращает файловый дескриптор. Принимает три аргумента:

          domain указывающий семейство протоколов создаваемого сокета

          • AF_INET для сетевого протокола IPv4
          • AF_INET6 для IPv6
          • AF_UNIX для локальных сокетов (используя файл)

          type

          • SOCK_STREAM (надёжная потокоориентированная служба (сервис) или потоковый сокет)
          • SOCK_DGRAM (служба датаграмм или датаграммный сокет)
          • SOCK_RAW (Сырой сокет — сырой протокол поверх сетевого уровня).

          protocol

          Протоколы обозначаются символьными константами с префиксом IPPROTO_* (например, IPPROTO_TCP или IPPROTO_UDP). Допускается значение protocol=0 (протокол не указан), в этом случае используется значение по умолчанию для данного вида соединений.

          Функция возвращает −1 в случае ошибки. Иначе, она возвращает целое число, представляющее присвоенный дескриптор.

          Пример на Python

          Связывает сокет с конкретным адресом. Когда сокет создается при помощи socket(), он ассоциируется с некоторым семейством адресов, но не с конкретным адресом. До того как сокет сможет принять входящие соединения, он должен быть связан с адресом. bind() принимает три аргумента:

          1. sockfd — дескриптор, представляющий сокет при привязке
          2. serv_addr — указатель на структуру sockaddr, представляющую адрес, к которому привязываем.
          3. addrlen — поле socklen_t, представляющее длину структуры sockaddr.

          Возвращает 0 при успехе и −1 при возникновении ошибки.

          Пример на Python

          Автоматическое получение имени хоста.

          listen()¶

          Подготавливает привязываемый сокет к принятию входящих соединений. Данная функция применима только к типам сокетов SOCK_STREAM и SOCK_SEQPACKET. Принимает два аргумента:

          1. sockfd — корректный дескриптор сокета.
          2. backlog — целое число, означающее число установленных соединений, которые могут быть обработаны в любой момент времени. Операционная система обычно ставит его равным максимальному значению.

          После принятия соединения оно выводится из очереди. В случае успеха возвращается 0, в случае возникновения ошибки возвращается −1.

          Пример на Python

          accept()¶

          Используется для принятия запроса на установление соединения от удаленного хоста. Принимает следующие аргументы:

          1. sockfd — дескриптор слушающего сокета на принятие соединения.
          2. cliaddr — указатель на структуру sockaddr, для принятия информации об адресе клиента.
          3. addrlen — указатель на socklen_t, определяющее размер структуры, содержащей клиентский адрес и переданной в accept(). Когда accept() возвращает некоторое значение, socklen_t указывает сколько байт структуры cliaddr использовано в данный момент.

          Функция возвращает дескриптор сокета, связанный с принятым соединением, или −1 в случае возникновения ошибки.

          Пример на Python

          connect()¶

          Устанавливает соединение с сервером.

          Некоторые типы сокетов работают без установления соединения, это в основном касается UDP-сокетов. Для них соединение приобретает особое значение: цель по умолчанию для посылки и получения данных присваивается переданному адресу, позволяя использовать такие функции как send() и recv() на сокетах без установления соединения.

          Загруженный сервер может отвергнуть попытку соединения, поэтому в некоторых видах программ необходимо предусмотреть повторные попытки соединения.

          Возвращает целое число, представляющее код ошибки: 0 означает успешное выполнение, а −1 свидетельствует об ошибке.

          Пример на Python

          Передача данных¶

          Для передачи данных можно пользоваться стандартными функциями чтения/записи файлов read и write, но есть специальные функции для передачи данных через сокеты:

          Читайте также: