Модуль 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() | Находится ли сокет в блокирующем режиме. |