Python Bluetooth-разъемы - Asyn c соединение (семейство AI не поддерживается) - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь подключить Bluetooth-сокеты, но при попытке подключения сталкиваюсь с не поддерживаемым исключением «семейства ai» (ошибка выводится ниже).

Сокращенный фрагмент кода ниже, он вызывается из запущенного задача, так что l oop уже запущен

    bt_address = 'F4:60:E2:D3:D8:D9'
    bt_port = 11
    event_loop = asyncio.get_running_loop()
    sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
    await event_loop.sock_connect(socket, (bt_address, bt_port))
    sock.setblocking(False)

    # Start Read/Write tasks here ...

Это выдает исключение во время sock_connect:

  await self.event_loop.sock_connect(self.tag_socket, (tag_address, tag_port))
  File "/usr/local/lib/python3.7/asyncio/selector_events.py", line 459, in sock_connect
    address, family=sock.family, proto=sock.proto, loop=self)
  File "/usr/local/lib/python3.7/asyncio/base_events.py", line 1275, in _ensure_resolved
    proto=proto, flags=flags)
  File "/usr/local/lib/python3.7/asyncio/base_events.py", line 784, in getaddrinfo
    None, getaddr_func, host, port, family, type, proto, flags)
  File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  **File "/usr/local/lib/python3.7/socket.py", line 748, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -6] ai_family not supported**

Однако, если я переключаюсь на стандартный метод подключения к сокету, проблем не возникает

sock.connect((bt_address, bt_port))

Кажется, проблема в том, что метод getaddrinfo, который вызывает event_l oop .sock_connect`, не может разрешить адрес Bluetooth - есть способ пропустить разрешение или альтернативный способ? сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...