socket — Low-level networking interface

Source code: Lib/socket.py


Цей модуль забезпечує доступ до інтерфейсу BSD socket. Він доступний у всіх сучасних системах Unix, Windows, MacOS і, можливо, на додаткових платформах.

Informacja

Деяка поведінка може залежати від платформи, оскільки виклики здійснюються до API сокетів операційної системи.

Dostępność: not WASI.

Этот модуль не работает или недоступен в WebAssembly. См. Платформы веб-сборки для получения дополнительной информации.

The Python interface is a straightforward transliteration of the Unix system call and library interface for sockets to Python’s object-oriented style: the socket() function returns a socket object whose methods implement the various socket system calls. Parameter types are somewhat higher-level than in the C interface: as with read() and write() operations on Python files, buffer allocation on receive operations is automatic, and buffer length is implicit on send operations.

Zobacz także

Module socketserver

Класи, які спрощують написання мережевих серверів.

Модуль ssl

Обгортка TLS/SSL для об’єктів сокета.

Сімейства розеток

Depending on the system and the build options, various socket families are supported by this module.

Формат адреси, необхідний для певного об’єкта сокета, вибирається автоматично на основі сімейства адрес, указаного під час створення об’єкта сокета. Адреси сокетів представлені таким чином:

  • The address of an AF_UNIX socket bound to a file system node is represented as a string, using the file system encoding and the 'surrogateescape' error handler (see PEP 383). An address in Linux’s abstract namespace is returned as a bytes-like object with an initial null byte; note that sockets in this namespace can communicate with normal file system sockets, so programs intended to run on Linux may need to deal with both types of address. A string or bytes-like object can be used for either type of address when passing it as an argument.

    Zmienione w wersji 3.3: Previously, AF_UNIX socket paths were assumed to use UTF-8 encoding.

    Zmienione w wersji 3.5: Записуваний bytes-like object тепер приймається.

  • A pair (host, port) is used for the AF_INET address family, where host is a string representing either a hostname in internet domain notation like 'daring.cwi.nl' or an IPv4 address like '100.50.200.5', and port is an integer.

    • For IPv4 addresses, two special forms are accepted instead of a host address: '' represents INADDR_ANY, which is used to bind to all interfaces, and the string '<broadcast>' represents INADDR_BROADCAST. This behavior is not compatible with IPv6, therefore, you may want to avoid these if you intend to support IPv6 with your Python programs.

  • For AF_INET6 address family, a four-tuple (host, port, flowinfo, scope_id) is used, where flowinfo and scope_id represent the sin6_flowinfo and sin6_scope_id members in struct sockaddr_in6 in C. For socket module methods, flowinfo and scope_id can be omitted just for backward compatibility. Note, however, omission of scope_id can cause problems in manipulating scoped IPv6 addresses.

    Zmienione w wersji 3.7: For multicast addresses (with scope_id meaningful) address may not contain %scope_id (or zone id) part. This information is superfluous and may be safely omitted (recommended).

  • AF_NETLINK сокети представлені як пари (pid, groups).

  • Linux-only support for TIPC is available using the AF_TIPC address family. TIPC is an open, non-IP based networked protocol designed for use in clustered computer environments. Addresses are represented by a tuple, and the fields depend on the address type. The general tuple form is (addr_type, v1, v2, v3 [, scope]), where:

    • addr_type is one of TIPC_ADDR_NAMESEQ, TIPC_ADDR_NAME, or TIPC_ADDR_ID.

    • scope є одним із TIPC_ZONE_SCOPE, TIPC_CLUSTER_SCOPE та TIPC_NODE_SCOPE.

    • If addr_type is TIPC_ADDR_NAME, then v1 is the server type, v2 is the port identifier, and v3 should be 0.

      If addr_type is TIPC_ADDR_NAMESEQ, then v1 is the server type, v2 is the lower port number, and v3 is the upper port number.

      Якщо addr_type дорівнює TIPC_ADDR_ID, тоді v1 є вузлом, v2 є посиланням, а v3 має бути встановлено на 0.

  • Кортеж (інтерфейс, ) використовується для сімейства адрес AF_CAN, де інтерфейс — це рядок, що представляє назву мережевого інтерфейсу, наприклад 'can0'. Ім’я мережевого інтерфейсу '' можна використовувати для отримання пакетів від усіх мережевих інтерфейсів цього сімейства.

    • CAN_ISOTP protocol require a tuple (interface, rx_addr, tx_addr) where both additional parameters are unsigned long integer that represent a CAN identifier (standard or extended).

    • CAN_J1939 protocol require a tuple (interface, name, pgn, addr) where additional parameters are 64-bit unsigned integer representing the ECU name, a 32-bit unsigned integer representing the Parameter Group Number (PGN), and an 8-bit integer representing the address.

  • Строка или кортеж (id, unit) используется для протокола SYSPROTO_CONTROL семейства PF_SYSTEM. Эта строка представляет собой имя элемента управления ядра с использованием динамически назначаемого идентификатора. Кортеж можно использовать, если известны идентификатор и номер устройства управления ядром или если используется зарегистрированный идентификатор.

    Dodane w wersji 3.3.

  • AF_BLUETOOTH supports the following protocols and address formats:

    • BTPROTO_L2CAP accepts (bdaddr, psm) where bdaddr is the Bluetooth address as a string and psm is an integer.

    • BTPROTO_RFCOMM accepts (bdaddr, channel) where bdaddr is the Bluetooth address as a string and channel is an integer.

    • BTPROTO_HCI accepts a format that depends on your OS.

      • On Linux it accepts a tuple (device_id,) where device_id is an integer specifying the number of the Bluetooth device.

      • 在 FreeBSD, NetBSD 和 DragonFly BSD 上它接受 bdaddr 其中 bdaddr 是字符串形式的蓝牙地址。

      Zmienione w wersji 3.2: NetBSD and DragonFlyBSD support added.

      Zmienione w wersji 3.13.3: FreeBSD support added.

    • BTPROTO_SCO accepts bdaddr where bdaddr is the Bluetooth address as a string or a bytes object. (ex. '12:23:34:45:56:67' or b'12:23:34:45:56:67') This protocol is not supported under FreeBSD.

  • AF_ALG — це інтерфейс для криптографії ядра на основі сокетів лише для Linux. Сокет алгоритму налаштований за допомогою кортежу з двох-чотирьох елементів (type, name [, feat [, mask]]), де:

    • type is the algorithm type as string, e.g. aead, hash, skcipher or rng.

    • ім’я — це назва алгоритму та режим роботи у вигляді рядка, напр. sha256, hmac(sha256), cbc(aes) або drbg_nopr_ctr_aes256.

    • feat і mask — це 32-розрядні цілі числа без знаку.

    Dostępność: Linux >= 2.6.38.

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

    Dodane w wersji 3.6.

  • AF_VSOCK дозволяє спілкуватися між віртуальними машинами та їх хостами. Сокети представлені як кортеж (CID, порт), де ідентифікатор контексту або CID і порт є цілими числами.

    Dostępność: Linux >= 3.9

    См. vsock(7)

    Dodane w wersji 3.7.

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

    • ifname - Рядок, що визначає назву пристрою.

    • proto — номер протокола Ethernet. Это может быть ETH_P_ALL для захвата всех протоколов, одна из констант ETHERTYPE_* или любой другой номер протокола Ethernet.

    • pkttype - Optional integer specifying the packet type:

      • PACKET_HOST (the default) - Packet addressed to the local host.

      • PACKET_BROADCAST - широкомовний пакет фізичного рівня.

      • PACKET_MULTICAST - Packet sent to a physical-layer multicast address.

      • PACKET_OTHERHOST - Packet to some other host that has been caught by a device driver in promiscuous mode.

      • PACKET_OUTGOING – Пакет, що надходить від локального хосту і повертається до сокета пакета.

    • hatype – додаткове ціле число, що визначає тип апаратної адреси ARP.

    • addr – необов’язковий байтовий об’єкт, що вказує апаратну фізичну адресу, інтерпретація якої залежить від пристрою.

    Dostępność: Linux >= 2.2.

  • AF_QIPCRTR — це інтерфейс на основі сокетів лише для Linux для зв’язку зі службами, що працюють на співпроцесорах на платформах Qualcomm. Сімейство адрес представлено як кортеж (вузол, порт), де вузол і порт є невід’ємними цілими числами.

    Dostępność: Linux >= 4.7.

    Dodane w wersji 3.8.

  • IPPROTO_UDPLITE is a variant of UDP which allows you to specify what portion of a packet is covered with the checksum. It adds two socket options that you can change. self.setsockopt(IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV, length) will change what portion of outgoing packets are covered by the checksum and self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length) will filter out packets which cover too little of their data. In both cases length should be in range(8, 2**16, 8).

    Such a socket should be constructed with socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE) for IPv4 or socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE) for IPv6.

    Dostępność: Linux >= 2.6.20, FreeBSD >= 10.1

    Dodane w wersji 3.9.

  • AF_HYPERV is a Windows-only socket based interface for communicating with Hyper-V hosts and guests. The address family is represented as a (vm_id, service_id) tuple where the vm_id and service_id are UUID strings.

    The vm_id is the virtual machine identifier or a set of known VMID values if the target is not a specific virtual machine. Known VMID constants defined on socket are:

    • HV_GUID_ZERO

    • HV_GUID_BROADCAST

    • HV_GUID_WILDCARD - Used to bind on itself and accept connections from all partitions.

    • HV_GUID_CHILDREN - Used to bind on itself and accept connection from child partitions.

    • HV_GUID_LOOPBACK — используется как цель для самого себя.

    • HV_GUID_PARENT - When used as a bind accepts connection from the parent partition. When used as an address target it will connect to the parent partition.

    The service_id is the service identifier of the registered service.

    Dodane w wersji 3.12.

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

All errors raise exceptions. The normal exceptions for invalid argument types and out-of-memory conditions can be raised. Errors related to socket or address semantics raise OSError or one of its subclasses.

Non-blocking mode is supported through setblocking(). A generalization of this based on timeouts is supported through settimeout().

Зміст модуля

Модуль socket експортує такі елементи.

Wyjątki

exception socket.error

Застарілий псевдонім OSError.

Zmienione w wersji 3.3: Після PEP 3151 цей клас отримав псевдонім OSError.

exception socket.herror

Підклас OSError, цей виняток виникає для помилок, пов’язаних з адресою, тобто для функцій, які використовують h_errno в POSIX C API, включаючи gethostbyname_ex() і gethostbyaddr(). Супровідним значенням є пара (h_errno, string), яка представляє помилку, яку повертає виклик бібліотеки. h_errno — це числове значення, тоді як string представляє опис h_errno, який повертає функція hstrerror() C.

Zmienione w wersji 3.3: This class was made a subclass of OSError.

exception socket.gaierror

A subclass of OSError, this exception is raised for address-related errors by getaddrinfo() and getnameinfo(). The accompanying value is a pair (error, string) representing an error returned by a library call. string represents the description of error, as returned by the gai_strerror() C function. The numeric error value will match one of the EAI_* constants defined in this module.

Zmienione w wersji 3.3: This class was made a subclass of OSError.

exception socket.timeout

A deprecated alias of TimeoutError.

A subclass of OSError, this exception is raised when a timeout occurs on a socket which has had timeouts enabled via a prior call to settimeout() (or implicitly through setdefaulttimeout()). The accompanying value is a string whose value is currently always „timed out”.

Zmienione w wersji 3.3: This class was made a subclass of OSError.

Zmienione w wersji 3.10: This class was made an alias of TimeoutError.

Stały

The AF_* and SOCK_* constants are now AddressFamily and SocketKind IntEnum collections.

Dodane w wersji 3.4.

socket.AF_UNIX
socket.AF_INET
socket.AF_INET6

These constants represent the address (and protocol) families, used for the first argument to socket(). If the AF_UNIX constant is not defined then this protocol is unsupported. More constants may be available depending on the system.

socket.AF_UNSPEC

AF_UNSPEC означает, что getaddrinfo() должен возвращать адреса сокетов для любого семейства адресов (IPv4, IPv6 или любого другого), которое можно использовать.

socket.SOCK_STREAM
socket.SOCK_DGRAM
socket.SOCK_RAW
socket.SOCK_RDM
socket.SOCK_SEQPACKET

These constants represent the socket types, used for the second argument to socket(). More constants may be available depending on the system. (Only SOCK_STREAM and SOCK_DGRAM appear to be generally useful.)

socket.SOCK_CLOEXEC
socket.SOCK_NONBLOCK

Ці дві константи, якщо їх визначено, можна комбінувати з типами сокетів і дозволити вам встановлювати деякі прапори атомарно (таким чином уникаючи можливих умов змагання та потреби в окремих викликах).

Zobacz także

Безопасная обработка файловых дескрипторов для более подробного объяснения.

Dostępność: Linux >= 2.6.27.

Dodane w wersji 3.2.

SO_*
socket.SOMAXCONN
MSG_*
SOL_*
SCM_*
IPPROTO_*
IPPORT_*
INADDR_*
IP_*
IPV6_*
EAI_*
AI_*
NI_*
TCP_*

Многие константы этих форм, описанные в документации Unix по сокетам и/или протоколу IP, также определены в модуле сокета. Обычно они используются в аргументах методов setsockopt() и getsockopt() объектов сокетов. В большинстве случаев определяются только те символы, которые определены в файлах заголовков Unix; для некоторых символов указаны значения по умолчанию.

Zmienione w wersji 3.6: Додано SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC, SO_PASSSEC, TCP_USER_TIMEOUT, TCP_CONGESTION.

Zmienione w wersji 3.6.5: On Windows, TCP_FASTOPEN, TCP_KEEPCNT appear if run-time Windows supports.

Zmienione w wersji 3.7: TCP_NOTSENT_LOWAT було додано.

On Windows, TCP_KEEPIDLE, TCP_KEEPINTVL appear if run-time Windows supports.

Zmienione w wersji 3.10: IP_RECVTOS was added. Added TCP_KEEPALIVE. On MacOS this constant can be used in the same way that TCP_KEEPIDLE is used on Linux.

Zmienione w wersji 3.11: Добавлен TCP_CONNECTION_INFO. В MacOS эту константу можно использовать так же, как TCP_INFO в Linux и BSD.

Zmienione w wersji 3.12: Добавлены SO_RTABLE и SO_USER_COOKIE. В OpenBSD и FreeBSD соответственно эти константы можно использовать так же, как SO_MARK в Linux. Также добавлены отсутствующие параметры TCP-сокета из Linux: TCP_MD5SIG, TCP_THIN_LINEAR_TIMEOUTS, TCP_THIN_DUPACK, TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS , TCP_TIMESTAMP, TCP_CC_INFO, TCP_SAVE_SYN, TCP_SAVED_SYN, TCP_REPAIR_WINDOW, TCP_FASTOPEN_CONNECT, TCP_ULP, TCP_MD5SIG_EXT, `` TCP_FASTOPEN_KEY`, TCP_FASTOPEN_NO_COOKIE, TCP_ZEROCOPY_RECEIVE, TCP_INQ, TCP_TX_DELAY. Добавлены IP_PKTINFO, IP_UNBLOCK_SOURCE, IP_BLOCK_SOURCE, IP_ADD_SOURCE_MEMBERSHIP, IP_DROP_SOURCE_MEMBERSHIP.

Zmienione w wersji 3.13: Добавлен SO_BINDTOIFINDEX. В Linux эту константу можно использовать так же, как SO_BINDTODEVICE, но с индексом сетевого интерфейса вместо его имени.

socket.AF_CAN
socket.PF_CAN
SOL_CAN_*
CAN_*

Many constants of these forms, documented in the Linux documentation, are also defined in the socket module.

Dostępność: Linux >= 2.6.25, NetBSD >= 8.

Dodane w wersji 3.3.

Zmienione w wersji 3.11: NetBSD support was added.

Zmienione w wersji 3.13.4: 在 Linux 上恢复缺失的 CAN_RAW_ERR_FILTER

socket.CAN_BCM
CAN_BCM_*

CAN_BCM, in the CAN protocol family, is the broadcast manager (BCM) protocol. Broadcast manager constants, documented in the Linux documentation, are also defined in the socket module.

Dostępność: Linux >= 2.6.25.

Informacja

The CAN_BCM_CAN_FD_FRAME flag is only available on Linux >= 4.8.

Dodane w wersji 3.4.

socket.CAN_RAW_FD_FRAMES

Вмикає підтримку CAN FD у гнізді CAN_RAW. За замовчуванням це вимкнено. Це дозволяє вашій програмі надсилати кадри CAN і CAN FD; однак під час читання з роз’єму ви повинні приймати як CAN, так і CAN FD кадри.

This constant is documented in the Linux documentation.

Dostępność: Linux >= 3.6.

Dodane w wersji 3.5.

socket.CAN_RAW_JOIN_FILTERS

Об’єднує застосовані фільтри CAN, щоб у простір користувача передавалися лише кадри CAN, які відповідають усім наданим фільтрам CAN.

This constant is documented in the Linux documentation.

Dostępność: Linux >= 4.1.

Dodane w wersji 3.9.

socket.CAN_ISOTP

CAN_ISOTP у сімействі протоколів CAN є протоколом ISO-TP (ISO 15765-2). Константи ISO-TP, задокументовані в документації Linux.

Dostępność: Linux >= 2.6.25.

Dodane w wersji 3.7.

socket.CAN_J1939

CAN_J1939, in the CAN protocol family, is the SAE J1939 protocol. J1939 constants, documented in the Linux documentation.

Dostępność: Linux >= 5.4.

Dodane w wersji 3.9.

socket.AF_DIVERT
socket.PF_DIVERT

Эти две константы, описанные на странице руководства FreeBSD divert(4), также определены в модуле сокета.

Dostępność: FreeBSD >= 14.0.

Dodane w wersji 3.12.

socket.AF_PACKET
socket.PF_PACKET
PACKET_*

Many constants of these forms, documented in the Linux documentation, are also defined in the socket module.

Dostępność: Linux >= 2.2.

socket.ETH_P_ALL

ETH_P_ALL can be used in the socket constructor as proto for the AF_PACKET family in order to capture every packet, regardless of protocol.

For more information, see the packet(7) manpage.

Dostępność: Linux.

Dodane w wersji 3.12.

socket.AF_RDS
socket.PF_RDS
socket.SOL_RDS
RDS_*

Many constants of these forms, documented in the Linux documentation, are also defined in the socket module.

Dostępność: Linux >= 2.6.30.

Dodane w wersji 3.3.

socket.SIO_RCVALL
socket.SIO_KEEPALIVE_VALS
socket.SIO_LOOPBACK_FAST_PATH
RCVALL_*

Константи для Windows WSAIoctl(). Константи використовуються як аргументи методу ioctl() об’єктів сокета.

Zmienione w wersji 3.6: SIO_LOOPBACK_FAST_PATH було додано.

TIPC_*

Константи, пов’язані з TIPC, що збігаються з тими, які експортує API сокета C. Додаткову інформацію див. у документації TIPC.

socket.AF_ALG
socket.SOL_ALG
ALG_*

Константи для криптографії ядра Linux.

Dostępność: Linux >= 2.6.38.

Dodane w wersji 3.6.

socket.AF_VSOCK
socket.IOCTL_VM_SOCKETS_GET_LOCAL_CID
VMADDR*
SO_VM*

Константи для зв’язку хост/гость Linux.

Dostępność: Linux >= 4.8.

Dodane w wersji 3.7.

Dostępność: BSD, macOS.

Dodane w wersji 3.4.

socket.has_ipv6

Ця константа містить логічне значення, яке вказує, чи підтримується IPv6 на цій платформі.

socket.BDADDR_ANY
socket.BDADDR_LOCAL

Це рядкові константи, що містять адреси Bluetooth зі спеціальними значеннями. Наприклад, BDADDR_ANY можна використовувати для вказівки будь-якої адреси, коли вказується сокет прив’язки за допомогою BTPROTO_RFCOMM.

socket.HCI_FILTER
socket.HCI_TIME_STAMP
socket.HCI_DATA_DIR

For use with BTPROTO_HCI. HCI_FILTER is only available on Linux and FreeBSD. HCI_TIME_STAMP and HCI_DATA_DIR are only available on Linux.

socket.AF_QIPCRTR

Константа для протоколу маршрутизатора IPC Qualcomm, який використовується для зв’язку з віддаленими процесорами, що надають послуги.

Dostępność: Linux >= 4.7.

socket.SCM_CREDS2
socket.LOCAL_CREDS
socket.LOCAL_CREDS_PERSISTENT

LOCAL_CREDS и LOCAL_CREDS_PERSISTENT могут использоваться с сокетами SOCK_DGRAM, SOCK_STREAM, что эквивалентно Linux/DragonFlyBSD SO_PASSCRED, в то время как LOCAL_CREDS отправляет учетные данные при первом чтении, LOCAL_CREDS_PERSISTENT отправляет при каждом чтении, затем для последнего необходимо использовать SCM_CREDS2 для типа сообщения.

Dodane w wersji 3.11.

Dostępność: FreeBSD.

socket.SO_INCOMING_CPU

Константа для оптимизации локальности ЦП, которая будет использоваться вместе с SO_REUSEPORT.

Dodane w wersji 3.11.

Dostępność: Linux >= 3.9

socket.AF_HYPERV
socket.HV_PROTOCOL_RAW
socket.HVSOCKET_CONNECT_TIMEOUT
socket.HVSOCKET_CONNECT_TIMEOUT_MAX
socket.HVSOCKET_CONNECTED_SUSPEND
socket.HVSOCKET_ADDRESS_FLAG_PASSTHRU
socket.HV_GUID_ZERO
socket.HV_GUID_WILDCARD
socket.HV_GUID_BROADCAST
socket.HV_GUID_CHILDREN
socket.HV_GUID_LOOPBACK
socket.HV_GUID_PARENT

Constants for Windows Hyper-V sockets for host/guest communications.

Dostępność: Windows.

Dodane w wersji 3.12.

socket.ETHERTYPE_ARP
socket.ETHERTYPE_IP
socket.ETHERTYPE_IPV6
socket.ETHERTYPE_VLAN

IEEE 802.3 protocol number. constants.

Dostępność: Linux, FreeBSD, macOS.

Dodane w wersji 3.12.

socket.SHUT_RD
socket.SHUT_WR
socket.SHUT_RDWR

These constants are used by the shutdown() method of socket objects.

Dostępność: not WASI.

Zadania

Створення сокетів

The following functions all create socket objects.

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

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

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

Новостворений сокет не успадковується.

Raises an auditing event socket.__new__ with arguments self, family, type, protocol.

Zmienione w wersji 3.3: Додано сімейство AF_CAN. Додано сімейство AF_RDS.

Zmienione w wersji 3.4: The CAN_BCM protocol was added.

Zmienione w wersji 3.4: Повернений сокет тепер не успадковується.

Zmienione w wersji 3.7: Додано протокол CAN_ISOTP.

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

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

will still create a non-blocking socket on OSes that support SOCK_NONBLOCK, but sock.type will be set to socket.SOCK_STREAM.

Zmienione w wersji 3.9: The CAN_J1939 protocol was added.

Zmienione w wersji 3.10: Додано протокол IPPROTO_MPTCP.

socket.socketpair([family[, type[, proto]]])

Build a pair of connected socket objects using the given address family, socket type, and protocol number. Address family, socket type, and protocol number are as for the socket() function above. The default family is AF_UNIX if defined on the platform; otherwise, the default is AF_INET.

Новостворені сокети не успадковуються.

Zmienione w wersji 3.2: The returned socket objects now support the whole socket API, rather than a subset.

Zmienione w wersji 3.4: Повернені сокети тепер не успадковуються.

Zmienione w wersji 3.5: Додано підтримку Windows.

socket.create_connection(address, timeout=GLOBAL_DEFAULT, source_address=None, *, all_errors=False)

Підключіться до служби TCP, яка прослуховує адресу в Інтернеті (2-кортеж (хост, порт)) і поверніть об’єкт сокета. Це функція вищого рівня, ніж socket.connect(): якщо host є нечисловим ім’ям хоста, вона намагатиметься вирішити його як для AF_INET, так і для AF_INET6, а потім спробуйте підключитися до всіх можливих адрес по черзі, доки підключення не вдасться. Це полегшує написання клієнтів, сумісних як з IPv4, так і з IPv6.

Передача додаткового параметра timeout встановить час очікування для екземпляра сокета перед спробою підключення. Якщо тайм-аут не вказано, використовується глобальне налаштування тайм-ауту за умовчанням, яке повертає getdefaulttimeout().

Якщо надано, source_address має бути 2-кортежем (хост, порт), щоб сокет прив’язувався до своєї адреси джерела перед підключенням. Якщо хост або порт мають значення «» або 0 відповідно, буде використано типову поведінку ОС.

Если соединение не может быть создано, возникает исключение. По умолчанию это исключение из последнего адреса в списке. Если all_errors имеет значение True, это ExceptionGroup, содержащий ошибки всех попыток.

Zmienione w wersji 3.2: вихідна_адреса була додана.

Zmienione w wersji 3.11: all_errors was added.

socket.create_server(address, *, family=AF_INET, backlog=None, reuse_port=False, dualstack_ipv6=False)

Удобная функция, которая создает TCP-сокет, привязанный к адресу (двухкортежный (хост, порт)) и возвращает объект сокета.

family should be either AF_INET or AF_INET6. backlog is the queue size passed to socket.listen(); if not specified , a default reasonable value is chosen. reuse_port dictates whether to set the SO_REUSEPORT socket option.

Если dualstack_ipv6 имеет значение true, family имеет значение AF_INET6 и платформа его поддерживает, сокет сможет принимать как соединения IPv4, так и соединения IPv6, в противном случае будет выдана ошибка ValueError. Предполагается, что большинство платформ POSIX и Windows поддерживают эту функциональность. Когда эта функциональность включена, адрес, возвращаемый socket.getpeername() при возникновении соединения IPv4, будет адресом IPv6, представленным как сопоставленный с IPv4 адрес IPv6. Если dualstack_ipv6 имеет значение false, эта функциональность будет явно отключена на платформах, которые включают ее по умолчанию (например, Linux). Этот параметр можно использовать вместе с has_dualstack_ipv6():

import socket

addr = ("", 8080)  # all interfaces, port 8080
if socket.has_dualstack_ipv6():
    s = socket.create_server(addr, family=socket.AF_INET6, dualstack_ipv6=True)
else:
    s = socket.create_server(addr)

Informacja

On POSIX platforms the SO_REUSEADDR socket option is set in order to immediately reuse previous sockets which were bound on the same address and remained in TIME_WAIT state.

Dodane w wersji 3.8.

socket.has_dualstack_ipv6()

Return True if the platform supports creating a TCP socket which can handle both IPv4 and IPv6 connections.

Dodane w wersji 3.8.

socket.fromfd(fd, family, type, proto=0)

Duplicate the file descriptor fd (an integer as returned by a file object’s fileno() method) and build a socket object from the result. Address family, socket type and protocol number are as for the socket() function above. The file descriptor should refer to a socket, but this is not checked — subsequent operations on the object may fail if the file descriptor is invalid. This function is rarely needed, but can be used to get or set socket options on a socket passed to a program as standard input or output (such as a server started by the Unix inet daemon). The socket is assumed to be in blocking mode.

Новостворений сокет не успадковується.

Zmienione w wersji 3.4: Повернений сокет тепер не успадковується.

socket.fromshare(data)

Instantiate a socket from data obtained from the socket.share() method. The socket is assumed to be in blocking mode.

Dostępność: Windows.

Dodane w wersji 3.3.

socket.SocketType

Це об’єкт типу Python, який представляє тип об’єкта сокета. Це те саме, що type(socket(...)).

Інші функції

The socket module also offers various network-related services:

socket.close(fd)

Close a socket file descriptor. This is like os.close(), but for sockets. On some platforms (most noticeable Windows) os.close() does not work for socket file descriptors.

Dodane w wersji 3.7.

socket.getaddrinfo(host, port, family=AF_UNSPEC, type=0, proto=0, flags=0)

This function wraps the C function getaddrinfo of the underlying system.

Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API.

Аргументы family, type и proto можно указать дополнительно, чтобы предоставить параметры и ограничить список возвращаемых адресов. Передайте их значения по умолчанию (AF_UNSPEC, 0 и 0 соответственно), чтобы не ограничивать результаты. Подробности смотрите в примечании ниже.

The flags argument can be one or several of the AI_* constants, and will influence how results are computed and returned. For example, AI_NUMERICHOST will disable domain name resolution and will raise an error if host is a domain name.

Функція повертає список із 5-ти кортежів із такою структурою:

(family, type, proto, canonname, sockaddr)

In these tuples, family, type, proto are all integers and are meant to be passed to the socket() function. canonname will be a string representing the canonical name of the host if AI_CANONNAME is part of the flags argument; else canonname will be empty. sockaddr is a tuple describing a socket address, whose format depends on the returned family (a (address, port) 2-tuple for AF_INET, a (address, port, flowinfo, scope_id) 4-tuple for AF_INET6), and is meant to be passed to the socket.connect() method.

Informacja

If you intend to use results from getaddrinfo() to create a socket (rather than, for example, retrieve canonname), consider limiting the results by type (e.g. SOCK_STREAM or SOCK_DGRAM) and/or proto (e.g. IPPROTO_TCP or IPPROTO_UDP) that your application can handle.

The behavior with default values of family, type, proto and flags is system-specific.

Many systems (for example, most Linux configurations) will return a sorted list of all matching addresses. These addresses should generally be tried in order until a connection succeeds (possibly tried in parallel, for example, using a Happy Eyeballs algorithm). In these cases, limiting the type and/or proto can help eliminate unsuccessful or unusable connection attempts.

Some systems will, however, only return a single address. (For example, this was reported on Solaris and AIX configurations.) On these systems, limiting the type and/or proto helps ensure that this address is usable.

Raises an auditing event socket.getaddrinfo with arguments host, port, family, type, protocol.

The following example fetches address information for a hypothetical TCP connection to example.org on port 80 (results may differ on your system if IPv6 isn’t enabled):

>>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
[(socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
 (socket.AF_INET, socket.SOCK_STREAM,
 6, '', ('93.184.216.34', 80))]

Zmienione w wersji 3.2: parameters can now be passed using keyword arguments.

Zmienione w wersji 3.7: для багатоадресних адрес IPv6 рядок, що представляє адресу, не міститиме частину %scope_id.

socket.getfqdn([name])

Повернути повне доменне ім’я для name. Якщо ім’я опущене або порожнє, воно інтерпретується як локальний хост. Щоб знайти повне ім’я, перевіряється ім’я хоста, яке повертає gethostbyaddr(), а потім ідуть псевдоніми хоста, якщо вони доступні. Вибрано перше ім’я, яке містить крапку. Якщо повне доменне ім’я недоступне, а було вказано ім’я, воно повертається без змін. Якщо name було порожнім або дорівнює '0.0.0.0', повертається ім’я хоста з gethostname().

socket.gethostbyname(hostname)

Translate a host name to IPv4 address format. The IPv4 address is returned as a string, such as '100.50.200.5'. If the host name is an IPv4 address itself it is returned unchanged. See gethostbyname_ex() for a more complete interface. gethostbyname() does not support IPv6 name resolution, and getaddrinfo() should be used instead for IPv4/v6 dual stack support.

Викликає подію аудиту socket.gethostbyname з аргументом hostname.

Dostępność: not WASI.

socket.gethostbyname_ex(hostname)

Translate a host name to IPv4 address format, extended interface. Return a 3-tuple (hostname, aliaslist, ipaddrlist) where hostname is the host’s primary host name, aliaslist is a (possibly empty) list of alternative host names for the same address, and ipaddrlist is a list of IPv4 addresses for the same interface on the same host (often but not always a single address). gethostbyname_ex() does not support IPv6 name resolution, and getaddrinfo() should be used instead for IPv4/v6 dual stack support.

Викликає подію аудиту socket.gethostbyname з аргументом hostname.

Dostępność: not WASI.

socket.gethostname()

Повертає рядок, що містить ім’я хоста машини, на якій зараз виконується інтерпретатор Python.

Викликає подію аудиту socket.gethostname без аргументів.

Note: gethostname() doesn’t always return the fully qualified domain name; use getfqdn() for that.

Dostępność: not WASI.

socket.gethostbyaddr(ip_address)

Return a 3-tuple (hostname, aliaslist, ipaddrlist) where hostname is the primary host name responding to the given ip_address, aliaslist is a (possibly empty) list of alternative host names for the same address, and ipaddrlist is a list of IPv4/v6 addresses for the same interface on the same host (most likely containing only a single address). To find the fully qualified domain name, use the function getfqdn(). gethostbyaddr() supports both IPv4 and IPv6.

Викликає подію аудиту socket.gethostbyaddr з аргументом ip_address.

Dostępność: not WASI.

socket.getnameinfo(sockaddr, flags)

Translate a socket address sockaddr into a 2-tuple (host, port). Depending on the settings of flags, the result can contain a fully qualified domain name or numeric address representation in host. Similarly, port can contain a string port name or a numeric port number.

Для адрес IPv6 %scope_id додається до частини хоста, якщо sockaddr містить значимий scope_id. Зазвичай це відбувається для багатоадресних адрес.

Для отримання додаткової інформації про прапори ви можете звернутися до getnameinfo(3).

Викликає подію аудиту socket.getnameinfo з аргументом sockaddr.

Dostępność: not WASI.

socket.getprotobyname(protocolname)

Преобразуйте имя интернет-протокола (например, 'icmp') в константу, подходящую для передачи в качестве (необязательного) третьего аргумента функции socket(). Обычно это необходимо только для сокетов, открытых в «необработанном» режиме (SOCK_RAW); для обычных режимов сокетов правильный протокол выбирается автоматически, если протокол опущен или равен нулю.

Dostępność: not WASI.

socket.getservbyname(servicename[, protocolname])

Перекладіть назву інтернет-сервісу та назву протоколу на номер порту для цієї служби. Додаткова назва протоколу, якщо її вказано, має бути 'tcp' або 'udp', інакше будь-який протокол збігатиметься.

Викликає подію аудиту socket.getservbyname з аргументами servicename, protocolname.

Dostępność: not WASI.

socket.getservbyport(port[, protocolname])

Перекладіть номер інтернет-порту та назву протоколу на назву служби для цієї служби. Додаткова назва протоколу, якщо її вказано, має бути 'tcp' або 'udp', інакше будь-який протокол збігатиметься.

Викликає подію аудиту socket.getservbyport з аргументами port, protocolname.

Dostępność: not WASI.

socket.ntohl(x)

Convert 32-bit positive integers from network to host byte order. On machines where the host byte order is the same as network byte order, this is a no-op; otherwise, it performs a 4-byte swap operation.

socket.ntohs(x)

Перетворення 16-розрядних додатних чисел із мережевого порядку байтів на хост. На машинах, де порядок байтів хоста збігається з порядком байтів у мережі, це заборонено; інакше він виконує 2-байтову операцію обміну.

Zmienione w wersji 3.10: Raises OverflowError if x does not fit in a 16-bit unsigned integer.

socket.htonl(x)

Convert 32-bit positive integers from host to network byte order. On machines where the host byte order is the same as network byte order, this is a no-op; otherwise, it performs a 4-byte swap operation.

socket.htons(x)

Перетворення 16-розрядних додатних чисел із хоста в мережевий порядок байтів. На машинах, де порядок байтів хоста збігається з порядком байтів у мережі, це заборонено; інакше він виконує 2-байтову операцію обміну.

Zmienione w wersji 3.10: Raises OverflowError if x does not fit in a 16-bit unsigned integer.

socket.inet_aton(ip_string)

Convert an IPv4 address from dotted-quad string format (for example, «123.45.67.89») to 32-bit packed binary format, as a bytes object four characters in length. This is useful when conversing with a program that uses the standard C library and needs objects of type in_addr, which is the C type for the 32-bit packed binary this function returns.

inet_aton() також приймає рядки з менш ніж трьома крапками; подробиці див. на сторінці посібника Unix inet(3).

Якщо рядок адреси IPv4, переданий цій функції, недійсний, буде викликано OSError. Зауважте, що саме те, що є дійсним, залежить від базової реалізації C inet_aton().

inet_aton() не підтримує IPv6, а inet_pton() слід використовувати замість цього для підтримки подвійного стеку IPv4/v6.

socket.inet_ntoa(packed_ip)

Преобразуйте 32-битный упакованный адрес IPv4 (объект, подобный bytes длиной в четыре байта) в его стандартное строковое представление, состоящее из четырех точек (например, «123.45.67.89»). Это полезно при общении с программой, которая использует стандартную библиотеку C и нуждается в объектах типа in_addr, который является типом C для 32-битных упакованных двоичных данных, которые эта функция принимает в качестве аргумента.

If the byte sequence passed to this function is not exactly 4 bytes in length, OSError will be raised. inet_ntoa() does not support IPv6, and inet_ntop() should be used instead for IPv4/v6 dual stack support.

Zmienione w wersji 3.5: Записуваний bytes-like object тепер приймається.

socket.inet_pton(address_family, ip_string)

Преобразуйте IP-адрес из строкового формата, специфичного для семейства, в упакованный двоичный формат. inet_pton() полезен, когда библиотека или сетевой протокол вызывает объект типа in_addr (аналогично inet_aton()) или in6_addr.

Supported values for address_family are currently AF_INET and AF_INET6. If the IP address string ip_string is invalid, OSError will be raised. Note that exactly what is valid depends on both the value of address_family and the underlying implementation of inet_pton().

Dostępność: Unix, Windows.

Zmienione w wersji 3.4: Додано підтримку Windows

socket.inet_ntop(address_family, packed_ip)

Convert a packed IP address (a bytes-like object of some number of bytes) to its standard, family-specific string representation (for example, '7.10.0.5' or '5aef:2b::8'). inet_ntop() is useful when a library or network protocol returns an object of type in_addr (similar to inet_ntoa()) or in6_addr.

Supported values for address_family are currently AF_INET and AF_INET6. If the bytes object packed_ip is not the correct length for the specified address family, ValueError will be raised. OSError is raised for errors from the call to inet_ntop().

Dostępność: Unix, Windows.

Zmienione w wersji 3.4: Додано підтримку Windows

Zmienione w wersji 3.5: Записуваний bytes-like object тепер приймається.

socket.CMSG_LEN(length)

Повертає загальну довжину, без заповнення в кінці, елемента допоміжних даних із пов’язаними даними заданої довжини. Це значення часто можна використовувати як розмір буфера для recvmsg() для отримання окремого елемента допоміжних даних, але RFC 3542 вимагає, щоб портативні програми використовували CMSG_SPACE() і таким чином включали простір для заповнення, навіть якщо елемент буде останнім у буфері. Викликає OverflowError, якщо length виходить за межі допустимого діапазону значень.

Dostępność: Unix, not WASI.

Большинство платформ Unix.

Dodane w wersji 3.3.

socket.CMSG_SPACE(length)

Повертає розмір буфера, необхідний для recvmsg() для отримання елемента допоміжних даних із пов’язаними даними заданої довжини разом із будь-яким доповненням у кінці. Буферний простір, необхідний для отримання кількох елементів, є сумою значень CMSG_SPACE() для відповідної довжини даних. Викликає OverflowError, якщо length виходить за межі допустимого діапазону значень.

Note that some systems might support ancillary data without providing this function. Also note that setting the buffer size using the results of this function may not precisely limit the amount of ancillary data that can be received, since additional data may be able to fit into the padding area.

Dostępność: Unix, not WASI.

most Unix platforms.

Dodane w wersji 3.3.

socket.getdefaulttimeout()

Повертає стандартний час очікування в секундах (float) для нових об’єктів сокета. Значення None вказує на те, що нові об’єкти сокета не мають часу очікування. Коли модуль сокета імпортовано вперше, за замовчуванням буде None.

socket.setdefaulttimeout(timeout)

Встановіть стандартний час очікування в секундах (float) для нових об’єктів сокета. Коли модуль сокета імпортовано вперше, за замовчуванням буде None. Перегляньте settimeout() можливі значення та їх відповідні значення.

socket.sethostname(name)

Встановіть ім’я хоста машини на name. Це викличе OSError, якщо у вас недостатньо прав.

Викликає подію аудиту socket.sethostname з аргументом name.

Dostępność: Unix, not Android.

Dodane w wersji 3.3.

socket.if_nameindex()

Повертає список кортежів інформації про мережевий інтерфейс (index int, name string). OSError, якщо системний виклик не вдається.

Dostępność: Unix, Windows, not WASI.

Dodane w wersji 3.3.

Zmienione w wersji 3.8: Додано підтримку Windows.

Informacja

On Windows network interfaces have different names in different contexts (all names are examples):

  • UUID: {FB605B73-AAC2-49A6-9A2F-25416AEA0573}

  • name: ethernet_32770

  • friendly name: vEthernet (nat)

  • description: Hyper-V Virtual Ethernet Adapter

Ця функція повертає імена другої форми зі списку, ethernet_32770 у цьому прикладі.

socket.if_nametoindex(if_name)

Return a network interface index number corresponding to an interface name. OSError if no interface with the given name exists.

Dostępność: Unix, Windows, not WASI.

Dodane w wersji 3.3.

Zmienione w wersji 3.8: Додано підтримку Windows.

Zobacz także

„Назва інтерфейсу” — це назва, задокументована в if_nameindex().

socket.if_indextoname(if_index)

Return a network interface name corresponding to an interface index number. OSError if no interface with the given index exists.

Dostępność: Unix, Windows, not WASI.

Dodane w wersji 3.3.

Zmienione w wersji 3.8: Додано підтримку Windows.

Zobacz także

„Назва інтерфейсу” — це назва, задокументована в if_nameindex().

socket.send_fds(sock, buffers, fds[, flags[, address]])

Отправьте список файловых дескрипторов fds через сокет AF_UNIX sock. Параметр fds представляет собой последовательность файловых дескрипторов. Обратитесь к sendmsg() за документацией по этим параметрам.

Dostępność: Unix, not WASI.

Платформы Unix, поддерживающие механизм sendmsg() и SCM_RIGHTS.

Dodane w wersji 3.9.

socket.recv_fds(sock, bufsize, maxfds[, flags])

Получите до maxfds файловых дескрипторов из сокета AF_UNIX sock. Возврат (msg, list(fds), flags, addr). Обратитесь к recvmsg() для получения документации по этим параметрам.

Dostępność: Unix, not WASI.

Unix platforms supporting recvmsg() and SCM_RIGHTS mechanism.

Dodane w wersji 3.9.

Informacja

Будь-які скорочені цілі числа в кінці списку дескрипторів файлів.

Socket Objects

Socket objects have the following methods. Except for makefile(), these correspond to Unix system calls applicable to sockets.

Zmienione w wersji 3.2: Додано підтримку протоколу context manager. Вихід із контекстного менеджера еквівалентний виклику close().

socket.accept()

Прийняти підключення. Сокет має бути прив’язаний до адреси та прослуховувати підключення. Поверненим значенням є пара (conn, address), де conn — це новий об’єкт сокета, який можна використовувати для надсилання та отримання даних під час з’єднання, а address — це адреса, прив’язана до сокета на іншому кінець з’єднання.

Новостворений сокет не успадковується.

Zmienione w wersji 3.4: Тепер сокет не успадковується.

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

socket.bind(address)

Bind the socket to address. The socket must not already be bound. (The format of address depends on the address family — see above.)

Викликає подію аудиту socket.bind з аргументами self, address.

Dostępność: not WASI.

socket.close()

Mark the socket closed. The underlying system resource (e.g. a file descriptor) is also closed when all file objects from makefile() are closed. Once that happens, all future operations on the socket object will fail. The remote end will receive no more data (after queued data is flushed).

Sockets are automatically closed when they are garbage-collected, but it is recommended to close() them explicitly, or to use a with statement around them.

Zmienione w wersji 3.6: OSError тепер викликається, якщо виникає помилка під час основного виклику close().

Informacja

close() освобождает ресурс, связанный с соединением, но не обязательно немедленно закрывает соединение. Если вы хотите своевременно закрыть соединение, вызовите shutdown() перед close().

socket.connect(address)

Підключіться до віддаленої розетки за адресою. (Формат адреси залежить від групи адрес — див. вище.)

Якщо з’єднання перервано сигналом, метод чекає, доки з’єднання не завершиться, або викликає TimeoutError після тайм-ауту, якщо обробник сигналу не викликає виключення, а сокет блокується або має тайм-аут. Для неблокуючих сокетів метод викликає виняток InterruptedError, якщо з’єднання переривається сигналом (або винятком, викликаним обробником сигналу).

Raises an auditing event socket.connect with arguments self, address.

Zmienione w wersji 3.5: Тепер метод очікує, доки з’єднання завершиться, замість того, щоб викликати виняток InterruptedError, якщо з’єднання перервано сигналом, обробник сигналу не викликає виключення, а сокет блокується або має тайм-аут (див. PEP 475 для обґрунтування).

Dostępność: not WASI.

socket.connect_ex(address)

Подібно до connect(address), але повертає індикатор помилки замість виклику винятку для помилок, які повертає виклик connect() рівня C (інші проблеми, такі як „хост не знайдено”, можуть все ще викликають винятки). Індикатор помилки – 0, якщо операція виконана успішно, інакше значення змінної errno. Це корисно для підтримки, наприклад, асинхронних підключень.

Raises an auditing event socket.connect with arguments self, address.

Dostępność: not WASI.

socket.detach()

Переведіть об’єкт сокета в закритий стан, фактично не закриваючи базовий файловий дескриптор. Файловий дескриптор повертається, і його можна повторно використовувати для інших цілей.

Dodane w wersji 3.2.

socket.dup()

Дублюйте розетку.

Новостворений сокет не успадковується.

Zmienione w wersji 3.4: Тепер сокет не успадковується.

Dostępność: not WASI.

socket.fileno()

Return the socket’s file descriptor (a small integer), or -1 on failure. This is useful with select.select().

Under Windows the small integer returned by this method cannot be used where a file descriptor can be used (such as os.fdopen()). Unix does not have this limitation.

socket.get_inheritable()

Отримайте inheritable flag дескриптора файлу сокета або дескриптора сокета: True, якщо сокет можна успадкувати в дочірніх процесах, False, якщо це неможливо.

Dodane w wersji 3.4.

socket.getpeername()

Return the remote address to which the socket is connected. This is useful to find out the port number of a remote IPv4/v6 socket, for instance. (The format of the address returned depends on the address family — see above.) On some systems this function is not supported.

socket.getsockname()

Повернути власну адресу сокета. Це корисно, наприклад, щоб дізнатися номер порту сокета IPv4/v6. (Формат адреси, що повертається, залежить від сімейства адрес — див. вище.)

socket.getsockopt(level, optname[, buflen])

Return the value of the given socket option (see the Unix man page getsockopt(2)). The needed symbolic constants (SO_* etc.) are defined in this module. If buflen is absent, an integer option is assumed and its integer value is returned by the function. If buflen is present, it specifies the maximum length of the buffer used to receive the option in, and this buffer is returned as a bytes object. It is up to the caller to decode the contents of the buffer (see the optional built-in module struct for a way to decode C structures encoded as byte strings).

Dostępność: not WASI.

socket.getblocking()

Повертає True, якщо сокет знаходиться в режимі блокування, False, якщо він не блокується.

This is equivalent to checking socket.gettimeout() != 0.

Dodane w wersji 3.7.

socket.gettimeout()

Return the timeout in seconds (float) associated with socket operations, or None if no timeout is set. This reflects the last call to setblocking() or settimeout().

socket.ioctl(control, option)
Platform:

Windows

Метод ioctl() є обмеженим інтерфейсом системного інтерфейсу WSAIoctl. Будь ласка, зверніться до документації Win32 для отримання додаткової інформації.

On other platforms, the generic fcntl.fcntl() and fcntl.ioctl() functions may be used; they accept a socket object as their first argument.

Currently only the following control codes are supported: SIO_RCVALL, SIO_KEEPALIVE_VALS, and SIO_LOOPBACK_FAST_PATH.

Zmienione w wersji 3.6: SIO_LOOPBACK_FAST_PATH було додано.

socket.listen([backlog])

Увімкніть сервер для прийняття підключень. Якщо вказано backlog, воно має бути принаймні 0 (якщо менше, то встановлюється на 0); він визначає кількість неприйнятих підключень, які система дозволить перед тим, як відхилити нові підключення. Якщо не вказано, вибирається розумне значення за умовчанням.

Dostępność: not WASI.

Zmienione w wersji 3.5: The backlog parameter is now optional.

socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None, newline=None)

Return a file object associated with the socket. The exact returned type depends on the arguments given to makefile(). These arguments are interpreted the same way as by the built-in open() function, except the only supported mode values are 'r' (default), 'w', 'b', or a combination of those.

The socket must be in blocking mode; it can have a timeout, but the file object’s internal buffer may end up in an inconsistent state if a timeout occurs.

Закриття файлового об’єкта, який повертає makefile(), не закриє оригінальний сокет, якщо всі інші файлові об’єкти не закриті та socket.close() не викликано для об’єкта сокета.

Informacja

У Windows файлоподібний об’єкт, створений makefile(), не можна використовувати там, де очікується файловий об’єкт із дескриптором файлу, наприклад аргументи потоку subprocess.Popen().

socket.recv(bufsize[, flags])

Получить данные из сокета. Возвращаемое значение — это байтовый объект, представляющий полученные данные. Максимальный объем данных, принимаемых за один раз, определяется bufsize. Возвращенный объект с пустыми байтами указывает на то, что клиент отключился. См. страницу руководства Unix recv(2), чтобы узнать значение необязательного аргумента flags; по умолчанию он равен нулю.

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

socket.recvfrom(bufsize[, flags])

Отримувати дані з розетки. Поверненим значенням є пара (байти, адреса), де байт — об’єкт байтів, що представляє отримані дані, а адреса — адреса сокета, який надсилає дані. Перегляньте сторінку посібника Unix recv(2) для визначення значення необов’язкового аргументу flags; за замовчуванням він дорівнює нулю. (Формат адреси залежить від групи адрес — див. вище.)

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

Zmienione w wersji 3.7: Для багатоадресної адреси IPv6 перший елемент address більше не містить частини %scope_id. Щоб отримати повну адресу IPv6, використовуйте getnameinfo().

socket.recvmsg(bufsize[, ancbufsize[, flags]])

Отримувати звичайні дані (до bufsize байтів) і допоміжні дані з сокета. Аргумент ancbufsize встановлює розмір у байтах внутрішнього буфера, який використовується для отримання допоміжних даних; за замовчуванням він дорівнює 0, що означає, що допоміжні дані не будуть отримані. Відповідні розміри буферів для допоміжних даних можна обчислити за допомогою CMSG_SPACE() або CMSG_LEN(), а елементи, які не вміщаються в буфер, можуть бути скорочені або відкинуті. Аргумент flags за умовчанням дорівнює 0 і має те саме значення, що й для recv().

Повернене значення – це 4-кортеж: (data, ancdata, msg_flags, address). Елемент data — це об’єкт bytes, що містить отримані непобічні дані. Елемент ancdata — це список із нуля або більше кортежів (cmsg_level, cmsg_type, cmsg_data), що представляють отримані допоміжні дані (керуючі повідомлення): cmsg_level і cmsg_type — цілі числа, що визначають рівень протоколу та протокол- певного типу відповідно, і cmsg_data є об’єктом bytes, що містить пов’язані дані. Елемент msg_flags — це порозрядне АБО різних прапорів, що вказують на умови отриманого повідомлення; подробиці дивіться в системній документації. Якщо сокет-одержувач не підключений, адреса є адресою сокета-відправника, якщо він доступний; інакше його значення не вказано.

В некоторых системах sendmsg() и recvmsg() могут использоваться для передачи дескрипторов файлов между процессами через сокет AF_UNIX. Когда используется эта возможность (она часто ограничена сокетами SOCK_STREAM), recvmsg() будет возвращать в своих вспомогательных данных элементы формы (socket.SOL_SOCKET, socket.SCM_RIGHTS, fds ), где fds — это объект bytes, представляющий новые файловые дескрипторы в виде двоичного массива собственного типа C int. Если recvmsg() вызывает исключение после возврата системного вызова, он сначала попытается закрыть любые файловые дескрипторы, полученные через этот механизм.

Some systems do not indicate the truncated length of ancillary data items which have been only partially received. If an item appears to extend beyond the end of the buffer, recvmsg() will issue a RuntimeWarning, and will return the part of it which is inside the buffer provided it has not been truncated before the start of its associated data.

On systems which support the SCM_RIGHTS mechanism, the following function will receive up to maxfds file descriptors, returning the message data and a list containing the descriptors (while ignoring unexpected conditions such as unrelated control messages being received). See also sendmsg().

import socket, array

def recv_fds(sock, msglen, maxfds):
    fds = array.array("i")   # Array of ints
    msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize))
    for cmsg_level, cmsg_type, cmsg_data in ancdata:
        if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS:
            # Append data, ignoring any truncated integers at the end.
            fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
    return msg, list(fds)

Dostępność: Unix.

Большинство платформ Unix.

Dodane w wersji 3.3.

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

socket.recvmsg_into(buffers[, ancbufsize[, flags]])

Отримувати звичайні дані та допоміжні дані з сокета, поводячись так, як це зробив би recvmsg(), але розкидати не допоміжні дані в ряд буферів замість повернення нового об’єкта bytes. Аргумент buffers має бути ітерованим об’єктами, які експортують записувані буфери (наприклад, об’єкти bytearray); вони будуть заповнені послідовними фрагментами непоміжних даних, доки вони не будуть записані або більше не залишиться буферів. Операційна система може встановити обмеження (sysconf() значення SC_IOV_MAX) на кількість буферів, які можна використовувати. Аргументи ancbufsize і flags мають те саме значення, що й для recvmsg().

Повернене значення — це 4-кортеж: (nbytes, ancdata, msg_flags, address), де nbytes — загальна кількість байтів непоміжних даних, записаних у буфери, а ancdata, msg_flags і адреса такі самі, як і для recvmsg().

Przykład:

>>> import socket
>>> s1, s2 = socket.socketpair()
>>> b1 = bytearray(b'----')
>>> b2 = bytearray(b'0123456789')
>>> b3 = bytearray(b'--------------')
>>> s1.send(b'Mary had a little lamb')
22
>>> s2.recvmsg_into([b1, memoryview(b2)[2:9], b3])
(22, [], 0, None)
>>> [b1, b2, b3]
[bytearray(b'Mary'), bytearray(b'01 had a 9'), bytearray(b'little lamb---')]

Dostępność: Unix.

Большинство платформ Unix.

Dodane w wersji 3.3.

socket.recvfrom_into(buffer[, nbytes[, flags]])

Receive data from the socket, writing it into buffer instead of creating a new bytestring. The return value is a pair (nbytes, address) where nbytes is the number of bytes received and address is the address of the socket sending the data. See the Unix manual page recv(2) for the meaning of the optional argument flags; it defaults to zero. (The format of address depends on the address family — see above.)

socket.recv_into(buffer[, nbytes[, flags]])

Отримайте до nbytes байт із сокета, зберігаючи дані в буфері, а не створюючи новий рядок байтів. Якщо nbytes не вказано (або 0), отримати до розміру, доступного в даному буфері. Повертає кількість отриманих байтів. Перегляньте сторінку посібника Unix recv(2) для визначення значення необов’язкового аргументу flags; за замовчуванням він дорівнює нулю.

socket.send(bytes[, flags])

Надіслати дані в сокет. Розетка повинна бути підключена до віддаленої розетки. Необов’язковий аргумент flags має те саме значення, що й для recv() вище. Повертає кількість надісланих байтів. Додатки відповідають за перевірку того, що всі дані були надіслані; якщо було передано лише частину даних, програма повинна спробувати доставити решту даних. Для отримання додаткової інформації з цієї теми зверніться до Socket Programming HOWTO.

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

socket.sendall(bytes[, flags])

Send data to the socket. The socket must be connected to a remote socket. The optional flags argument has the same meaning as for recv() above. Unlike send(), this method continues to send data from bytes until either all data has been sent or an error occurs. None is returned on success. On error, an exception is raised, and there is no way to determine how much data, if any, was successfully sent.

Zmienione w wersji 3.5: The socket timeout is no longer reset each time data is sent successfully. The socket timeout is now the maximum total duration to send all data.

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

socket.sendto(bytes, address)
socket.sendto(bytes, flags, address)

Send data to the socket. The socket should not be connected to a remote socket, since the destination socket is specified by address. The optional flags argument has the same meaning as for recv() above. Return the number of bytes sent. (The format of address depends on the address family — see above.)

Викликає подію аудиту socket.sendto з аргументами self, address.

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

socket.sendmsg(buffers[, ancdata[, flags[, address]]])

Надсилайте звичайні та допоміжні дані в сокет, збираючи недопоміжні дані з ряду буферів і об’єднуючи їх в одне повідомлення. Аргумент buffers вказує на не допоміжні дані як ітерацію bytes-подібних об’єктів (наприклад, bytes об’єктів); операційна система може встановити обмеження (sysconf() значення SC_IOV_MAX) на кількість буферів, які можна використовувати. Аргумент ancdata визначає допоміжні дані (керуючі повідомлення) як ітерацію з нуля або більше кортежів (cmsg_level, cmsg_type, cmsg_data), де cmsg_level і cmsg_type є цілими числами, що визначають рівень протоколу та протокол- певного типу відповідно, а cmsg_data — це байтиподібний об’єкт, що містить пов’язані дані. Зверніть увагу, що деякі системи (зокрема, системи без CMSG_SPACE()) можуть підтримувати надсилання лише одного керуючого повідомлення на виклик. Аргумент flags за умовчанням дорівнює 0 і має те саме значення, що й для send(). Якщо вказано address, а не None, це встановлює адресу призначення для повідомлення. Повернене значення — це кількість байтів надісланих непоміжних даних.

The following function sends the list of file descriptors fds over an AF_UNIX socket, on systems which support the SCM_RIGHTS mechanism. See also recvmsg().

import socket, array

def send_fds(sock, msg, fds):
    return sock.sendmsg([msg], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, array.array("i", fds))])

Dostępność: Unix, not WASI.

Большинство платформ Unix.

Raises an auditing event socket.sendmsg with arguments self, address.

Dodane w wersji 3.3.

Zmienione w wersji 3.5: If the system call is interrupted and the signal handler does not raise an exception, the method now retries the system call instead of raising an InterruptedError exception (see PEP 475 for the rationale).

socket.sendmsg_afalg([msg, ]*, op[, iv[, assoclen[, flags]]])

Specialized version of sendmsg() for AF_ALG socket. Set mode, IV, AEAD associated data length and flags for AF_ALG socket.

Dostępność: Linux >= 2.6.38.

Dodane w wersji 3.6.

socket.sendfile(file, offset=0, count=None)

Send a file until EOF is reached by using high-performance os.sendfile and return the total number of bytes which were sent. file must be a regular file object opened in binary mode. If os.sendfile is not available (e.g. Windows) or file is not a regular file send() will be used instead. offset tells from where to start reading the file. If specified, count is the total number of bytes to transmit as opposed to sending the file until EOF is reached. File position is updated on return or also in case of error in which case file.tell() can be used to figure out the number of bytes which were sent. The socket must be of SOCK_STREAM type. Non-blocking sockets are not supported.

Dodane w wersji 3.5.

socket.set_inheritable(inheritable)

Set the inheritable flag of the socket’s file descriptor or socket’s handle.

Dodane w wersji 3.4.

socket.setblocking(flag)

Встановіть блокуючий або неблокуючий режим сокета: якщо flag має значення false, сокет встановлено в неблокуючий режим, інакше в режим блокування.

This method is a shorthand for certain settimeout() calls:

  • sock.setblocking(True) is equivalent to sock.settimeout(None)

  • sock.setblocking(False) еквівалентний sock.settimeout(0.0)

Zmienione w wersji 3.7: Метод більше не застосовує прапор SOCK_NONBLOCK до socket.type.

socket.settimeout(value)

Set a timeout on blocking socket operations. The value argument can be a nonnegative floating-point number expressing seconds, or None. If a non-zero value is given, subsequent socket operations will raise a timeout exception if the timeout period value has elapsed before the operation has completed. If zero is given, the socket is put in non-blocking mode. If None is given, the socket is put in blocking mode.

Щоб отримати додаткову інформацію, зверніться до приміток щодо тайм-аутів сокетів.

Zmienione w wersji 3.7: Метод більше не вмикає прапор SOCK_NONBLOCK на socket.type.

socket.setsockopt(level, optname, value: int)
socket.setsockopt(level, optname, value: buffer)
socket.setsockopt(level, optname, None, optlen: int)

Установите значение данной опции сокета (см. страницу руководства Unix setsockopt(2)). В этом модуле определены необходимые символические константы (SO_* и т. д. <socket-unix-constants>). Значение может быть целым числом, None или байтовым объектом, представляющим буфер. В последнем случае вызывающая сторона должна убедиться, что строка байтов содержит правильные биты (см. дополнительный встроенный модуль struct, чтобы узнать, как кодировать структуры C как строки байтов). Если для value установлено значение None, требуется аргумент optlen. Это эквивалентно вызову функции C setsockopt() с optval=NULL и optlen=optlen.

Zmienione w wersji 3.5: Записуваний bytes-like object тепер приймається.

Zmienione w wersji 3.6: setsockopt(level, optname, None, optlen: int) form added.

Dostępność: not WASI.

socket.shutdown(how)

Shut down one or both halves of the connection. If how is SHUT_RD, further receives are disallowed. If how is SHUT_WR, further sends are disallowed. If how is SHUT_RDWR, further sends and receives are disallowed.

Dostępność: not WASI.

socket.share(process_id)

Duplicate a socket and prepare it for sharing with a target process. The target process must be provided with process_id. The resulting bytes object can then be passed to the target process using some form of interprocess communication and the socket can be recreated there using fromshare(). Once this method has been called, it is safe to close the socket since the operating system has already duplicated it for the target process.

Dostępność: Windows.

Dodane w wersji 3.3.

Зверніть увагу, що немає методів read() або write(); замість цього використовуйте recv() і send() без аргументу flags.

Об’єкти Socket також мають ці атрибути (лише для читання), які відповідають значенням, наданим конструктору socket.

socket.family

The socket family.

socket.type

Тип розетки.

socket.proto

Протокол сокета.

Notes on socket timeouts

A socket object can be in one of three modes: blocking, non-blocking, or timeout. Sockets are by default always created in blocking mode, but this can be changed by calling setdefaulttimeout().

  • In blocking mode, operations block until complete or the system returns an error (such as connection timed out).

  • In non-blocking mode, operations fail (with an error that is unfortunately system-dependent) if they cannot be completed immediately: functions from the select module can be used to know when and whether a socket is available for reading or writing.

  • In timeout mode, operations fail if they cannot be completed within the timeout specified for the socket (they raise a timeout exception) or if the system returns an error.

Informacja

At the operating system level, sockets in timeout mode are internally set in non-blocking mode. Also, the blocking and timeout modes are shared between file descriptors and socket objects that refer to the same network endpoint. This implementation detail can have visible consequences if e.g. you decide to use the fileno() of a socket.

Час очікування та метод connect

Операція connect() також залежить від параметра тайм-ауту, і загалом рекомендується викликати settimeout() перед викликом connect() або передати параметр часу очікування для create_connection(). Однак системний мережевий стек також може повертати власну помилку очікування підключення незалежно від будь-якого параметра часу очікування сокета Python.

Час очікування та метод accept

Якщо getdefaulttimeout() не None, сокети, повернуті методом accept(), успадковують цей час очікування. В іншому випадку поведінка залежить від налаштувань прослуховувального сокета:

  • if the listening socket is in blocking mode or in timeout mode, the socket returned by accept() is in blocking mode;

  • якщо сокет, що прослуховує, знаходиться в неблокуючому режимі, чи є сокет, повернутий accept() у блокуючому чи неблокуючому режимі, залежить від операційної системи. Якщо ви хочете забезпечити кросплатформну поведінку, радимо вручну змінити це налаштування.

Przykład

Here are four minimal example programs using the TCP/IP protocol: a server that echoes all data that it receives back (servicing only one client), and a client using it. Note that a server must perform the sequence socket(), bind(), listen(), accept() (possibly repeating the accept() to service more than one client), while a client only needs the sequence socket(), connect(). Also note that the server does not sendall()/recv() on the socket it is listening on but on the new socket returned by accept().

The first two examples support IPv4 only.

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.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 = 'daring.cwi.nl'    # The remote host
PORT = 50007              # The same port as used by the server
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))

The next two examples are identical to the above two, but support both IPv4 and IPv6. The server side will listen to the first address family available (it should listen to both instead). On most of IPv6-ready systems, IPv6 will take precedence and the server may not accept IPv4 traffic. The client side will try to connect to all the addresses returned as a result of the name resolution, and sends traffic to the first one connected successfully.

# Echo server program
import socket
import sys

HOST = None               # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,
                              socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
    af, socktype, proto, canonname, sa = res
    try:
        s = socket.socket(af, socktype, proto)
    except OSError as msg:
        s = None
        continue
    try:
        s.bind(sa)
        s.listen(1)
    except OSError as msg:
        s.close()
        s = None
        continue
    break
if s is None:
    print('could not open socket')
    sys.exit(1)
conn, addr = s.accept()
with conn:
    print('Connected by', addr)
    while True:
        data = conn.recv(1024)
        if not data: break
        conn.send(data)
# Echo client program
import socket
import sys

HOST = 'daring.cwi.nl'    # The remote host
PORT = 50007              # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
    af, socktype, proto, canonname, sa = res
    try:
        s = socket.socket(af, socktype, proto)
    except OSError as msg:
        s = None
        continue
    try:
        s.connect(sa)
    except OSError as msg:
        s.close()
        s = None
        continue
    break
if s is None:
    print('could not open socket')
    sys.exit(1)
with s:
    s.sendall(b'Hello, world')
    data = s.recv(1024)
print('Received', repr(data))

У наступному прикладі показано, як написати дуже простий мережевий сніфер із необробленими сокетами у Windows. У прикладі потрібні права адміністратора, щоб змінити інтерфейс:

import socket

# the public network interface
HOST = socket.gethostbyname(socket.gethostname())

# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST, 0))

# Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

# receive all packets
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

# receive a packet
print(s.recvfrom(65565))

# disabled promiscuous mode
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

У наступному прикладі показано, як використовувати інтерфейс сокета для зв’язку з мережею CAN за допомогою необробленого протоколу сокета. Щоб замість цього використовувати CAN із протоколом диспетчера трансляції, відкрийте сокет за допомогою:

socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_BCM)

After binding (CAN_RAW) or connecting (CAN_BCM) the socket, you can use the socket.send() and socket.recv() operations (and their counterparts) on the socket object as usual.

Цей останній приклад може вимагати спеціальних привілеїв:

import socket
import struct


# CAN frame packing/unpacking (see 'struct can_frame' in <linux/can.h>)

can_frame_fmt = "=IB3x8s"
can_frame_size = struct.calcsize(can_frame_fmt)

def build_can_frame(can_id, data):
    can_dlc = len(data)
    data = data.ljust(8, b'\x00')
    return struct.pack(can_frame_fmt, can_id, can_dlc, data)

def dissect_can_frame(frame):
    can_id, can_dlc, data = struct.unpack(can_frame_fmt, frame)
    return (can_id, can_dlc, data[:can_dlc])


# create a raw socket and bind it to the 'vcan0' interface
s = socket.socket(socket.AF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
s.bind(('vcan0',))

while True:
    cf, addr = s.recvfrom(can_frame_size)

    print('Received: can_id=%x, can_dlc=%x, data=%s' % dissect_can_frame(cf))

    try:
        s.send(cf)
    except OSError:
        print('Error sending CAN frame')

    try:
        s.send(build_can_frame(0x01, b'\x01\x02\x03'))
    except OSError:
        print('Error sending CAN frame')

Running an example several times with too small delay between executions, could lead to this error:

Ошибка ОС: [Errno 98] Адрес уже используется

This is because the previous execution has left the socket in a TIME_WAIT state, and can’t be immediately reused.

Чтобы предотвратить это, необходимо установить флаг socket socket.SO_REUSEADDR:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))

the SO_REUSEADDR flag tells the kernel to reuse a local socket in TIME_WAIT state, without waiting for its natural timeout to expire.

Zobacz także

For an introduction to socket programming (in C), see the following papers:

  • Вступний навчальний посібник із взаємодії між процесами 4.3BSD, Стюарт Сехрест

  • An Advanced 4.3BSD Interprocess Communication Tutorial, by Samuel J. Leffler et al,

both in the UNIX Programmer’s Manual, Supplementary Documents 1 (sections PS1:7 and PS1:8). The platform-specific reference material for the various socket-related system calls are also a valuable source of information on the details of socket semantics. For Unix, refer to the manual pages; for Windows, see the WinSock (or Winsock 2) specification. For IPv6-ready APIs, readers may want to refer to RFC 3493 titled Basic Socket Interface Extensions for IPv6.