Я пытаюсь подключить 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 - есть способ пропустить разрешение или альтернативный способ? сделать это?