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

Работа с объектами сокетов напрямую из низкоуровнего кода asyncio.

В разделе рассмотрены методы цикла событий модуля asyncio, при помощи которых можно работать с открытым сокетом напрямую из низкоуровнего кода.

В основном, реализации протокола, использующие API на основе транспорта, такие как loop.create_connection() и loop.create_server(), быстрее, чем реализации, которые работают с сокетами напрямую. Бывают случаи, когда производительность не критична, а работать с объектами сокетов напрямую удобнее.

Прежде чем что-то делать с циклом событий, его необходимо создать или получить функциями, описанными в разделе "Создание, запуск и получение цикла событий".

Содержание:


loop.sock_recv(sock, nbytes):

Метод loop.sock_recv() получает до n байтов от открытого сокета sock. Асинхронная версия Socket.recv().

Представляет собой сопрограмму. Возвращает полученные данные в виде байтового объекта.

Аргумент sock должен быть неблокирующим сокетом.

Изменено в Python 3.7: несмотря на то, что этот метод всегда был документирован как метод сопрограммы, выпуски до Python 3.7 возвращали Future объект. Начиная с Python 3.7 это метод определен как async def.

loop.sock_recv_into(sock, buf):

Метод loop.sock_recv_into() получает данные из открытого сокета sock в буфер buf. Создан по образцу блокирующего метода Socket.recv_into().

Возвращает количество байтов, записанных в буфер.

Аргумент sock должен быть неблокирующим сокетом.

Новое в Python 3.7

loop.sock_sendall(sock, data):

Метод loop.sock_sendall() отправляет данные в открытый сокет sock. Асинхронная версия Socket.sendall().

Метод loop.sock_sendall() продолжает отправку в сокет до тех пор, пока не будут отправлены все данные data или пока не возникнет ошибка. В случае успеха ничего не возвращается. При ошибке возникает исключение. Кроме того, невозможно определить, сколько данных, если таковые имеются, было успешно обработано принимающей стороной соединения.

Аргумент sock должен быть неблокирующим сокетом.

Изменено в Python 3.7: несмотря на то, что этот метод всегда был документирован как метод сопрограммы, выпуски до Python 3.7 возвращали Future объект. Начиная с Python 3.7 это метод определен как async def.

loop.sock_connect(sock, address):

Метод loop.sock_connect() подключает сокет к удаленному сокету sock по адресу address. Асинхронная версия Socket.connect().

Аргумент sock должен быть неблокирующим сокетом.

Смотрите также низкоуровневый метод loop.create_connection() и высокоуровневую функцию asyncio.open_connection().

loop.sock_accept(sock):

Метод loop.sock_accept() принимает соединение. Создан по образцу блокирующего метода Socket.accept().

Сокет должен быть привязан к адресу и прослушивать соединения. Возвращаемое значение - это пара (conn, address), где conn - это новый объект сокета, который можно использовать для отправки и получения данных в соединении, а address - это адрес, привязанный к сокету на другом конце соединения.

Аргумент sock должен быть неблокирующим сокетом.

Изменено в Python 3.7: несмотря на то, что этот метод всегда был документирован как метод сопрограммы, выпуски до Python 3.7 возвращали Future объект. Начиная с Python 3.7 это метод определен как async def.

Смотрите также низкоуровневый методы loop.create_server() и asyncio.start_server().

loop.sock_sendfile(sock, file, offset=0, count=None, *, fallback=True):

Метод loop.sock_sendfile() отправляет файл, если это возможно, с помощью высокопроизводительного файла os.sendfile. Возвращает общее количество отправленных байтов. Асинхронная версия Socket.sendfile().

Аргумент sock должен быть неблокирующим socket.SOCK_STREAM сокетом.

Аргумент file должен быть обычным файловым объектом, открытым в двоичном режиме mode='rb'.

Аргумент offset сообщает, откуда начать чтение файла. Если указан аргумент count - это общее количество байтов для передачи в отличие от отправки файла до достижения EOF.

Положение указателя файла всегда обновляется, даже если этот метод вызывает ошибку.

Метод file.tell() может использоваться для получения фактического количества отправленных байтов.

Если аргумент fallback=True, то asyncio вручную читает и отправляет файл, когда платформа не поддерживает системный вызов sendfile() (например, Windows или сокет SSL в Unix). Если система не поддерживает системный вызов sendfile(), то возникает исключение asyncio.SendfileNotAvailableError, а так же происходит откат к значению fallback=False.

Новое в Python 3.7