Сокеты TCP/UDP

Модуль socket и класс socket.socket: Минимальная документация TCP/UDP

ДИСКЛЕЙМЕР! ДАННОЕ ОПИСАНИЕ НЕ ПРЕТЕНДУЕТ НА ПОЛНОТУ! ДАННОЕ ОПИСАНИЕ ДОСТАТОЧНО ДЛЯ РАБОТЫ С ПРОТОКОЛАМИ UDP И TCP.

Конструктор

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

Существует множество видов сокетов, все они строятся в зависимости от параметров переданных в конструктор.

Варианты family: AF_INET, AF_INET6, AF_UNIX, AF_CAN, AF_PACKET, AF_RDS.

Варианты type: SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, протоколы и режимы вашей OS.

Если тип family == AF_NET, то возможны следующие варианты proto: CAN_RAW, CAN_BCM, CAN_ISOTP, CAN_J1939. Иначе укажите 0, значение будет вычислено автоматически.

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

Комбинация family, type, proto определяет поведение сокета и его дескриптор.

Исключения

OSError Все исключения унаследованы от OSError. Все ошибки, которые выбрасывают сокеты, можно отследить с помощью этого исключения.
socket.herror Исключение возникает при ошибке в адресе, выбрасывается некоторыми статическими функциями.
socket.gaierror Исключение аналогично предыдущему, возникает при попытке получить информацию об адресе.
socket.timeout Исключение выбрасывается, если операция не была выполнена за время timeout.

Константы

AF_INET, AF_INET6, AF_UNIX Сокеты для работы с протоколами ipv4, ipv6, а также файловой системой внутри unix. Если система не поддерживает какой-то протокол, то соответствующая константа не определена.
AF_CAN, PF_CAN, AF_RDS, AF_PACKET, PF_PACKET Протоколы и константы, использующиеся в Linux. Документацию к ним можно посмотреть в документации системы.
SOCK_STREAM Константа обозначает, что сокет будет работать в режиме "потока". Комбинация этой константы и AF_INET описывает стандартный TCP сокет.
SOCK_DGRAM Константа обозначает, что сокет будет работать в режиме отправки и принятия одиночных датаграмм. Комбинация этой константы и AF_INET описывает стандартный UDP сокет.
SOCK_RAW Константа обозначает, что сокет не будет использовать каких-либо протоколов, вы можете сами задать полное содержимое пакета, включая любые служебные поля.
CAN_BCM, CAN_ISOTP, CAN_J1939 Семейство протоколов Linux. Для подробностей читайте документацию к Linux >= 5.4.

Методы

Краткое описание. Методы, в описании которых написано "(TCP)", будут работать при использовании SOCK_STREAM сокетов. Методы send и recv имеют опциональный параметр "flags", его значение можно посмотреть здесь.

count = send(bytes, [flags]) Отправляет данные, требует массив байт первым аргументом (например bytearray), возвращает число отправленных байт.
sendall(bytes, [flags]) Отправляет данные до тех пор, пока они не отправятся целиком. Требует массив байт первым аргументом (например bytearray). В случае неудачи выбрасывает исключение. (TCP)
count = sendto(bytes, [flags], address) Отправляет данные, требует массив байт первым аргументом (например bytearray), возвращает число отправленных байт.
count = sendfile(file, offset=0, count=None) Отправляет файл, начиная с позиции offset, если указано count отправляет только count байт, возвращает число отправленных байт. file это обычный файловый объект, открытый в режиме чтения в бинарном режиме. (TCP)
bind(address) Связывает сокет с указанным адресом. Адресом может выступать пара (ip, port). Работает для TCP и UDP. Даёт возможность использовать recv.
data = recv(bufsize, [flags]) Ожидает входящие данные. Возвращает данные и адрес отправителя. Первый параметр определяет размер внутреннего буфера, лучше всего указывать степень двойки.
(data, address) = recvfrom(bufsize, [flags]) Ожидает входящие данные. Возвращает данные и адрес отправителя. Первый параметр определяет размер внутреннего буфера, лучше всего указывать степень двойки.
connect(address) Подключается к указанному адресу, в случае неудачи выбрасывает исключение. (TCP)
listen(backlog) Указывает, что сокет может принять backlog подключений. При заполнении очереди подключения отклоняются. (TCP)
(connection, address) = accept() Принимает входящее подключение. Возвращает новый сокет, для работы с ЭТИМ подключением, а также адрес подключившегося. (TCP)
address = getpeername() Возвращает адрес, к которому подключен сокет. Чаще всего пара (ip, port) (TCP)
address = getsockname() Возвращает адрес сокета. (Адрес используемого адаптера.)
shutdown(how) Запрещает выполнение одной из операций. Рекомендуется вызывать перед close. how определяет что именно будет запрещено.
close() Закрывает и уничтожает сокет. Должно быть вызвано после завершения работы с сокетом, рекомендуется перед этим вызвать shutdown.
descriptor = detach() Закрывает сокет и возвращает дескриптор. Может использоваться для создания нового сокета.
descriptor = fileno() Возвращает дескриптор сокета.
socket = dup() Создаёт копию сокета.
settimeout(value) Переводит сокет в режим таймайута: сокет пытается выполнить операцию в течении указанного времени, после выбрасывает исключение. None означает, что сокет находится в блокирующем режиме без таймаута, 0 - перевод в неблокирующий режим.
time = gettimeout() Возвращает время ожидания у операций с сокетом.
setblocking(flag) Устанавливает сокет в блокирующий или неблокирующий режим. setblocking(True) тоже что settimeout(None). setblocking(False) тоже что settimeout(0.0).
isblocking = getblocking() Находится ли сокет в блокирующем режиме.