aioble — Asynchroniczne BLE¶
aioble to wysokopoziomowa, przyjazna dla asyncio nakładka na moduł bluetooth. Udostępnia czyste korutyny do skanowania, łączenia, rozgłaszania, usług GATT oraz kanałów L2CAP.
Wszystkie operacje zdalne (połączenie, rozłączenie, odczyt/zapis klienta, indykacja serwera, odbiór/wysyłka l2cap, parowanie) są oczekiwalne (awaitable) i obsługują limity czasu.
Obsługiwane role:
Broadcaster (rozgłaszający) — generuje ładunki rozgłaszania i odpowiedzi na skanowanie dla typowych pól, automatycznie dzieli ładunek pomiędzy rozgłaszanie a odpowiedź na skanowanie, rozgłasza bez ograniczeń lub przez określony czas.
Peripheral (urządzenie peryferyjne) — oczekuje na połączenie od urządzenia centralnego, oczekuje na wymianę MTU.
Observer (skaner) — skanowanie pasywne i aktywne, łączenie ładunków rozgłaszania i odpowiedzi na skanowanie dla tego samego urządzenia, parsowanie typowych pól z ładunków rozgłaszania.
Central (urządzenie centralne) — łączy się z urządzeniem peryferyjnym, inicjuje wymianę MTU.
Klient GATT — wykrywa usługi / charakterystyki / deskryptory (opcjonalnie po UUID); odczytuje / zapisuje / zapisuje-z-odpowiedzią charakterystyki i deskryptory; subskrybuje powiadomienia i indykacje (poprzez CCCD); oczekuje na powiadomienia i indykacje.
Serwer GATT — rejestruje usługi / charakterystyki / deskryptory; oczekuje na zapisy w charakterystykach i deskryptorach; przechwytuje żądania odczytu; wysyła powiadomienia i indykacje (oraz oczekuje na odpowiedź).
L2CAP — akceptuje i nawiązuje połączeniowe kanały L2CAP, zarządza kontrolą przepływu kanału.
Bezpieczeństwo — zarządzanie kluczami/sekretami w oparciu o JSON, inicjowanie parowania, odpytywanie o stan szyfrowania / uwierzytelnienia.
Przykłady¶
Skanuje pobliskie urządzenia BLE i wypisuje każde z nich w miarę ich wykrywania:
import aioble
import asyncio
async def find_devices():
async with aioble.scan(duration_ms=5000, active=True) as scanner:
async for result in scanner:
print(result.device.addr_hex(), result.rssi, result.name())
asyncio.run(find_devices())
Łączy się z urządzeniem peryferyjnym rozgłaszającym usługę Heart Rate jako central i subskrybuje jego powiadomienia o pomiarach:
import aioble
import asyncio
import bluetooth
_HR_SERVICE = bluetooth.UUID(0x180D)
_HR_MEASUREMENT = bluetooth.UUID(0x2A37)
async def connect_and_read():
device = None
async with aioble.scan(duration_ms=5000, active=True) as scanner:
async for result in scanner:
if _HR_SERVICE in result.services():
device = result.device
break
if device is None:
return
async with await device.connect() as conn:
service = await conn.service(_HR_SERVICE)
char = await service.characteristic(_HR_MEASUREMENT)
await char.subscribe(notify=True)
while True:
data = await char.notified()
print("notify:", data)
asyncio.run(connect_and_read())
Działa jako peripheral: rejestruje usługę GATT, rozgłasza ją i przesyła powiadomienia do każdego, kto się połączy:
import aioble
import asyncio
import bluetooth
import struct
_ENV_SERVICE = bluetooth.UUID(0x181A)
_TEMP_CHAR = bluetooth.UUID(0x2A6E)
def encode_temperature(deg_c):
# Bluetooth Temperature (0x2A6E) is sint16 little-endian, 0.01 degC units.
return struct.pack("<h", round(deg_c * 100))
service = aioble.Service(_ENV_SERVICE)
temp_char = aioble.Characteristic(service, _TEMP_CHAR, read=True, notify=True)
aioble.register_services(service)
async def peripheral_task():
while True:
connection = await aioble.advertise(
interval_us=250000,
name="openmv-sensor",
services=[_ENV_SERVICE],
appearance=0x0300,
)
print("connected:", connection.device.addr_hex())
async with connection:
while connection.is_connected():
temp_char.write(encode_temperature(23.68), send_update=True)
await asyncio.sleep(1)
asyncio.run(peripheral_task())
Funkcje na poziomie modułu¶
- aioble.config(*args, **kwargs) Any¶
Przekazuje do
bluetooth.BLE.config(), upewniając się najpierw, że radio BLE jest aktywne.- args
Opcjonalna pojedyncza nazwa parametru do odpytania.
- kwargs
Argumenty nazwane służące do ustawiania wartości konfiguracyjnych.
- aioble.stop() None¶
Dezaktywuje radio BLE leżące u podstaw modułu i uruchamia wszelkie zarejestrowane procedury zamykania podmodułów. Po wywołaniu tej funkcji wszystkie skanery, rozgłaszania, połączenia i kanały L2CAP zostają zlikwidowane.
- aioble.scan(duration_ms: int, interval_us: int | None = None, window_us: int | None = None, active: bool = False) scan¶
Zwraca asynchroniczny menedżer kontekstu / asynchroniczny iterator
scan, który dla każdego unikalnego wykrytego urządzenia (lub dla każdej nowej porcji danych rozgłaszania ze znanego urządzenia) udostępnia instancjeScanResult.- duration_ms
Jak długo skanować, w milisekundach. Przekaż
0, aby skanować bez ograniczeń, aż menedżer kontekstu zostanie zakończony.- interval_us
Interwał skanowania w mikrosekundach. Domyślnie 1 280 000.
- window_us
Okno skanowania w mikrosekundach (musi być mniejsze lub równe interval_us). Domyślnie 11 250.
- active
Jeśli
True, wykonuje skanowanie aktywne (żąda danych odpowiedzi na skanowanie). DomyślnieFalse.
- aioble.advertise(interval_us: int, adv_data: bytes | None = None, resp_data: bytes | None = None, connectable: bool = True, limited_disc: bool = False, br_edr: bool = False, name: str | None = None, services: list | None = None, appearance: int = 0, manufacturer: tuple | None = None, timeout_ms: int | None = None) DeviceConnection¶
Korutyna asynchroniczna, która rozpoczyna rozgłaszanie i oczekuje na przychodzące połączenie od urządzenia centralnego. Zwraca
DeviceConnectionreprezentujące połączone urządzenie centralne lub zgłaszaasyncio.TimeoutErrorpo upływie limitu czasu.- interval_us
Interwał rozgłaszania, w mikrosekundach.
- adv_data
Surowy ładunek rozgłaszania. Jeśli nie zostanie ustawiony, adv_data jest budowany z pozostałych argumentów nazwanych.
- resp_data
Surowy ładunek odpowiedzi na skanowanie. Automatycznie wypełniany nadmiarem z adv_data, jeśli to konieczne.
- connectable
Jeśli
True, jest to rozgłaszanie umożliwiające połączenie.- limited_disc
Użyj flagi ograniczonej wykrywalności zamiast ogólnej.
- br_edr
Ustaw flagę obsługi BR/EDR.
- name
Opcjonalna pełna nazwa lokalna do osadzenia.
- services
Obiekt iterowalny zawierający
bluetooth.UUIDdo rozgłaszania.- appearance
16-bitowa wartość wyglądu (appearance) (zobacz przypisane numery Bluetooth).
- manufacturer
Krotka
(company_id, data_bytes)do rozgłaszania jako dane specyficzne dla producenta.- timeout_ms
Zatrzymaj rozgłaszanie po upływie tylu milisekund bez połączenia.
Noneoznacza rozgłaszanie aż do nawiązania połączenia.
- aioble.register_services(*services: Service) None¶
Rejestruje jeden lub więcej obiektów
Service(oraz ich charakterystyki i deskryptory) na serwerze GATT. Musi zostać wywołana raz przed uruchomieniemadvertise. Kolejne wywołania zastępują poprzednią rejestrację.- services
Jedna lub więcej instancji
Service.
Stałe na poziomie modułu¶
- aioble.ADDR_PUBLIC¶
Publiczny typ adresu urządzenia BLE (
0).
- aioble.ADDR_RANDOM¶
Losowy typ adresu urządzenia BLE (
1).
Wyjątki¶
- exception aioble.GattError¶
Zgłaszany, gdy zdalna operacja GATT (odczyt / zapis / indykacja) kończy się statusem niezerowym. Kod statusu jest dostępny w atrybucie
_status.
- exception aioble.DeviceDisconnectedError¶
Zgłaszany wewnątrz operacji asynchronicznej (np. odczyt, zapis, powiadomienie), gdy połączenie leżące u jej podstaw zostanie przerwane w trakcie oczekiwania.
- exception aioble.L2CAPDisconnectedError¶
Zgłaszany, gdy operacja wysyłki/odbioru/opróżnienia kanału L2CAP jest próbowana na rozłączonym kanale (lub zostaje przez niego przerwana).
- exception aioble.L2CAPConnectionError¶
Zgłaszany przez
DeviceConnection.l2cap_connect, gdy nawiązanie kanału się nie powiedzie. Kod statusu Bluetooth jest pierwszym argumentem.
Klasy¶
- class aioble.Device(addr_type: int, addr: bytes | str)¶
Reprezentuje zdalne urządzenie BLE według adresu. Dwie instancje
Devicesą uznawane za równe, jeśli zgadzają się zarówno addr_type, jak i addr. Używane jako uchwyt do inicjowania połączeń.- addr_type
Albo
ADDR_PUBLIC, alboADDR_RANDOM.- addr
Sześciobajtowy adres jako
byteslub ciąg szesnastkowy rozdzielony dwukropkami (np."aa:bb:cc:dd:ee:ff").
- addr_type¶
Typ adresu, z którym utworzono urządzenie.
- addr¶
Surowy sześciobajtowy adres urządzenia.
- connect(timeout_ms: int = 10000, scan_duration_ms: int | None = None, min_conn_interval_us: int | None = None, max_conn_interval_us: int | None = None) Awaitable[DeviceConnection]¶
Asynchroniczna. Inicjuje połączenie GAP z tym urządzeniem i zwraca powstałe
DeviceConnection. Anuluje wszelkie trwające skanowanie.- timeout_ms
Jak długo czekać na zakończenie połączenia.
- scan_duration_ms
Początkowy czas skanowania przed połączeniem (zależny od kontrolera).
- min_conn_interval_us / max_conn_interval_us
Opcjonalne granice interwału połączenia, w mikrosekundach.
- class aioble.DeviceConnection¶
Aktywne połączenie GAP z urządzeniem
Device. Zwracane przezDevice.connect()lubadvertise. Obsługuje użycie jako menedżer kontekstuasync withautomatycznie rozłączający się przy wyjściu.Nie należy tworzyć bezpośrednio.
- encrypted¶
True, gdy łącze jest zaszyfrowane (np. po sparowaniu).
- authenticated¶
True, jeśli łącze zostało uwierzytelnione (parowanie zabezpieczone przed atakiem MITM).
- bonded¶
True, jeśli parowanie wytworzyło klucze powiązania (bonding).
- key_size¶
Wynegocjowany rozmiar klucza szyfrowania w bajtach lub
False, jeśli nie jest zaszyfrowane.
- mtu¶
Wynegocjowane ATT MTU po
exchange_mtulubNone, dopóki nie zostanie ustawione.
- disconnect(timeout_ms: int = 2000) Awaitable[None]¶
Asynchroniczna. Rozłącza i czeka na przerwanie (IRQ) rozłączenia.
- timeout_ms
Maksymalny czas oczekiwania na rozłączenie.
- disconnected(timeout_ms: int | None = None, disconnect: bool = False) Awaitable[None]¶
Asynchroniczna. Oczekuje na zakończenie połączenia przez którąkolwiek ze stron. Jeśli disconnect ma wartość
True, najpierw aktywnie rozłącza.- timeout_ms
Maksymalny czas oczekiwania.
Noneoznacza oczekiwanie w nieskończoność.- disconnect
Jeśli
True, inicjuje rozłączenie.
- timeout(timeout_ms: int | None) DeviceTimeout¶
Zwraca menedżer kontekstu, który anuluje swoje ciało, jeśli upłynie limit czasu (zgłaszając
asyncio.TimeoutError) lub urządzenie się rozłączy (zgłaszającDeviceDisconnectedError).- timeout_ms
Limit czasu w milisekundach lub
Nonedla braku limitu czasu.
- exchange_mtu(mtu: int | None = None, timeout_ms: int = 1000) Awaitable[int]¶
Asynchroniczna. Inicjuje wymianę ATT MTU i zwraca wynegocjowane MTU.
- mtu
Opcjonalne preferowane MTU do ustawienia na leżącym u podstaw interfejsie BLE przed wymianą.
- timeout_ms
Limit czasu dla wymiany.
- service(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientService | None]¶
Asynchroniczna. Wykrywa pojedynczą zdalną usługę pasującą do uuid lub
None, jeśli nie zostanie znaleziona.
- services(uuid: bluetooth.UUID | None = None, timeout_ms: int = 2000) ClientDiscover¶
Zwraca asynchroniczny iterator zdalnych obiektów
ClientService. Używaj zasync fori wykonaj pętlę do końca.- uuid
Opcjonalny filtr UUID.
Nonezwraca każdą usługę.- timeout_ms
Limit czasu na wykrycie.
- pair(bond: bool = True, le_secure: bool = True, mitm: bool = False, io: int = 3, timeout_ms: int = 20000) Awaitable[None]¶
Asynchroniczna. Inicjuje parowanie na tym połączeniu. Po zakończeniu aktualizuje atrybuty
encrypted/authenticated/bonded/key_size.- bond
Utrwala klucze parowania.
- le_secure
Użyj LE Secure Connections.
- mitm
Wymagaj ochrony przed atakiem typu man-in-the-middle.
- io
Stała zdolności IO (np.
3dla braku wejścia/wyjścia).- timeout_ms
Limit czasu parowania.
- l2cap_accept(psm: int, mtu: int, timeout_ms: int | None = None) Awaitable[L2CAPChannel]¶
Asynchroniczna. Nasłuchuje na podanym PSM i zwraca
L2CAPChannel, gdy zdalna strona go otworzy.- psm
Multiplekser protokołu/usługi (PSM), na którym należy nasłuchiwać.
- mtu
Maksymalny rozmiar odbioru, w bajtach.
- timeout_ms
Maksymalny czas oczekiwania na połączenie zdalnej strony.
- l2cap_connect(psm: int, mtu: int, timeout_ms: int = 1000) Awaitable[L2CAPChannel]¶
Asynchroniczna. Otwiera kanał L2CAP do zdalnej strony na podanym PSM.
- psm
Multiplekser protokołu/usługi (PSM), z którym należy się połączyć.
- mtu
Maksymalny rozmiar odbioru, w bajtach.
- timeout_ms
Limit czasu połączenia.
- class aioble.ScanResult¶
Pojedyncze urządzenie wykryte podczas
scan. Ta sama instancja jest ponownie udostępniana w miarę napływania nowych danych rozgłaszania.Nie należy tworzyć bezpośrednio.
- rssi¶
Ostatnio zgłoszone RSSI, w dBm.
- adv_data¶
Surowy ładunek rozgłaszania (
byteslubNone).
- resp_data¶
Surowy ładunek odpowiedzi na skanowanie (
byteslubNone), jeśli włączone jest skanowanie aktywne.
- connectable¶
True, jeśli najnowsze rozgłaszanie umożliwiało połączenie.
- name() str | None¶
Dekoduje pełną (lub skróconą) rozgłaszaną nazwę lokalną z ładunku lub
None, jeśli nie jest obecna.
- services() Iterator[bluetooth.UUID]¶
Generator udostępniający każdy
bluetooth.UUIDrozgłaszany w polach listy usług 16/32/128-bitowych.
- class aioble.Service(uuid: bluetooth.UUID)¶
Lokalna usługa GATT. Zbuduj usługę z jedną lub więcej instancjami
Characteristic, a następnie przekaż ją doregister_services.- uuid
UUID usługi.
- uuid¶
UUID usługi.
- characteristics¶
Lista obiektów
Characteristicpowiązanych z tą usługą.
- class aioble.Characteristic(service: Service, uuid: bluetooth.UUID, read: bool = False, write: bool = False, write_no_response: bool = False, notify: bool = False, indicate: bool = False, initial: bytes | None = None, capture: bool = False)¶
Lokalna charakterystyka GATT. Utworzenie jej automatycznie dołącza ją do service.
- service
Usługa
Service, do której należy.- uuid
UUID charakterystyki.
- read, write, write_no_response, notify, indicate
Wartości logiczne wybierające obsługiwane operacje GATT.
- initial
Opcjonalna wartość początkowa (
bytes).- capture
Jeśli
True, zapisane wartości są kolejkowane (do 10 w głąb), aby szybkie, następujące po sobie zapisy nie zostały utracone. Każde wywołaniewrittenzwraca wtedy krotkę(connection, data).
- uuid¶
UUID charakterystyki.
- flags¶
Maska bitowa flag właściwości GATT zbudowana na podstawie konstruktora.
- descriptors¶
Lista obiektów
Descriptorpowiązanych z tą charakterystyką.
- write(data: bytes, send_update: bool = False) None¶
Aktualizuje wartość w lokalnej bazie danych GATT.
- data
Nowe bajty wartości.
- send_update
Jeśli
True, dodatkowo powiadamia/indykuje każde subskrybowane połączenie.
- notify(connection: DeviceConnection, data: bytes | None = None) None¶
Wysyła powiadomienie GATT (Notify) do connection.
- connection
Docelowe połączenie klienta.
- data
Ładunek do wysłania. Jeśli
None, wysyłana jest bieżąca wartość lokalna.
- indicate(connection: DeviceConnection, data: bytes | None = None, timeout_ms: int = 1000) Awaitable[None]¶
Asynchroniczna. Wysyła indykację GATT (Indicate) do connection i czeka na potwierdzenie klienta. Zgłasza
GattErrorprzy statusie niezerowym.- connection
Docelowe połączenie klienta.
- data
Ładunek do indykacji lub
None, aby wysłać wartość lokalną.- timeout_ms
Maksymalny czas oczekiwania na potwierdzenie.
- written(timeout_ms: int | None = None) Awaitable[DeviceConnection | tuple[DeviceConnection, bytes]]¶
Asynchroniczna. Oczekuje na zdalny zapis. Zwraca zapisujące
DeviceConnectionlub(connection, data), jeśli charakterystyka została utworzona zcapture=True.- timeout_ms
Maksymalny czas oczekiwania.
Noneoznacza oczekiwanie w nieskończoność.
- on_read(connection: DeviceConnection) int¶
Punkt przesłonięcia (override hook) wywoływany synchronicznie po otrzymaniu zdalnego odczytu. Zwróć
0, aby zezwolić na odczyt, lub niezerowy kod błędu ATT, aby go odrzucić. Domyślna implementacja zwraca0.
- class aioble.BufferedCharacteristic(service: Service, uuid: bluetooth.UUID, max_len: int = 20, append: bool = False, **kwargs)¶
Charakterystyka
Characteristic, której bufor GATT można skonfigurować. Przydatna do odbierania wartości większych niż domyślny rozmiar atrybutu lub do kolejkowania następujących po sobie zapisów.- max_len
Rozmiar bufora, w bajtach.
- append
Jeśli
True, kolejne zapisy są dopisywane do bufora zamiast nadpisywania.
Pozostałe argumenty są przekazywane do
Characteristic.
- class aioble.Descriptor(characteristic: Characteristic, uuid: bluetooth.UUID, read: bool = False, write: bool = False, initial: bytes | None = None)¶
Lokalny deskryptor GATT. Utworzenie go automatycznie dołącza go do characteristic. Dziedziczy
read,writeorazwrittenzCharacteristic.- characteristic
Charakterystyka
Characteristic, do której należy.- uuid
UUID deskryptora.
- read, write
Wartości logiczne wybierające obsługiwane operacje GATT.
- initial
Opcjonalna wartość początkowa (
bytes).
- class aioble.ClientService¶
Zdalna usługa GATT wykryta na urządzeniu równorzędnym (peer). Zwracana przez
DeviceConnection.service()lub iterowana zDeviceConnection.services().Nie należy tworzyć bezpośrednio.
- connection¶
Połączenie
DeviceConnection, do którego należy.
- uuid¶
UUID zdalnej usługi.
- characteristic(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientCharacteristic | None]¶
Asynchroniczna. Wykrywa pojedynczą charakterystykę po UUID lub
None, jeśli nie zostanie znaleziona.
- characteristics(uuid: bluetooth.UUID | None = None, timeout_ms: int = 2000) ClientDiscover¶
Zwraca asynchroniczny iterator obiektów
ClientCharacteristic. Używaj zasync fori wykonaj pętlę do końca.- uuid
Opcjonalny filtr UUID.
- timeout_ms
Limit czasu na wykrycie.
- class aioble.ClientCharacteristic¶
Zdalna charakterystyka GATT wykryta na urządzeniu równorzędnym (peer). Zwracana przez
ClientService.characteristic()lub iterowana zClientService.characteristics().Nie należy tworzyć bezpośrednio.
- service¶
Usługa
ClientService, do której należy.
- uuid¶
UUID charakterystyki.
- properties¶
Maska bitowa obsługiwanych operacji GATT zgłoszonych przez urządzenie równorzędne.
- read(timeout_ms: int = 1000) Awaitable[bytes]¶
Asynchroniczna. Wykonuje odczyt GATT (Read) i zwraca wartość. Zgłasza
GattErrorprzy statusie niezerowym.- timeout_ms
Limit czasu odczytu.
- write(data: bytes, response: bool | None = None, timeout_ms: int = 1000) Awaitable[None]¶
Asynchroniczna. Wykonuje zapis GATT (Write).
- data
Wartość do zapisania.
- response
True, aby wymagać odpowiedzi na zapis (i zgłosićGattErrorw razie niepowodzenia).Falsedla zapisu bez odpowiedzi.None(domyślnie) automatycznie wybiera na podstawie tego, co rozgłasza urządzenie równorzędne.- timeout_ms
Limit czasu zapisu (istotny tylko, jeśli response ma wartość
True).
- notified(timeout_ms: int | None = None) Awaitable[bytes]¶
Asynchroniczna. Oczekuje na następne powiadomienie dla tej charakterystyki i zwraca jego ładunek. Zwraca natychmiast, jeśli powiadomienie jest już zakolejkowane.
- timeout_ms
Maksymalny czas oczekiwania.
Noneoznacza oczekiwanie w nieskończoność.
- indicated(timeout_ms: int | None = None) Awaitable[bytes]¶
Asynchroniczna. Oczekuje na następną indykację dla tej charakterystyki i zwraca jej ładunek.
- timeout_ms
Maksymalny czas oczekiwania.
- subscribe(notify: bool = True, indicate: bool = False) Awaitable[None]¶
Asynchroniczna. Zapisuje Client Characteristic Configuration Descriptor (CCCD), aby zasubskrybować (lub anulować subskrypcję) powiadomień i/lub indykacji.
- notify
Włącz powiadomienia.
- indicate
Włącz indykacje.
- descriptor(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientDescriptor | None]¶
Asynchroniczna. Wykrywa pojedynczy deskryptor po UUID lub
None, jeśli nie zostanie znaleziony.
- descriptors(timeout_ms: int = 2000) ClientDiscover¶
Zwraca asynchroniczny iterator obiektów
ClientDescriptor. Używaj zasync fori wykonaj pętlę do końca.
- class aioble.ClientDescriptor¶
Zdalny deskryptor GATT wykryty na urządzeniu równorzędnym (peer). Dziedziczy
readorazwritezClientCharacteristic.Nie należy tworzyć bezpośrednio.
- characteristic¶
Charakterystyka
ClientCharacteristic, do której należy.
- uuid¶
UUID deskryptora.
- class aioble.L2CAPChannel¶
Aktywny połączeniowy kanał L2CAP. Zwracany przez
DeviceConnection.l2cap_accept()lubDeviceConnection.l2cap_connect(). Obsługuje użycie jako menedżer kontekstuasync withautomatycznie rozłączający się przy wyjściu.Nie należy tworzyć bezpośrednio.
- our_mtu¶
Maksymalny rozmiar, w bajtach, jaki urządzenie równorzędne może wysłać do nas w pojedynczym SDU.
- peer_mtu¶
Maksymalny rozmiar, w bajtach, jaki możemy wysłać do urządzenia równorzędnego w pojedynczym SDU.
- available() bool¶
Zwraca synchronicznie
True, jeśli zbuforowane dane odbiorcze są gotowe (tzn.recvintonie zablokuje wykonania).
- recvinto(buf: bytearray, timeout_ms: int | None = None) Awaitable[int]¶
Asynchroniczna. Odbiera do buf, zwracając liczbę odczytanych bajtów. Oczekuje na nowe dane, jeśli kanał jest pusty.
- buf
Wstępnie przydzielony bufor do wypełnienia.
- timeout_ms
Maksymalny czas oczekiwania.
Noneoznacza oczekiwanie w nieskończoność.
- send(buf: bytes, timeout_ms: int | None = None, chunk_size: int | None = None) Awaitable[None]¶
Asynchroniczna. Wysyła buf na kanale, fragmentując większe ładunki na fragmenty o rozmiarze MTU. Oczekuje na kredyty kontroli przepływu w razie potrzeby.
- buf
Obiekt typu bytes-like do wysłania.
- timeout_ms
Maksymalny czas oczekiwania na fragment.
- chunk_size
Opcjonalne przesłonięcie rozmiaru fragmentu na wywołanie. Ograniczone do
min(our_mtu * 2, peer_mtu).
- flush(timeout_ms: int | None = None) Awaitable[None]¶
Asynchroniczna. Oczekuje, aż wszelkie zatrzymane
sendzostaną opróżnione przez kontroler.- timeout_ms
Maksymalny czas oczekiwania.