Соединение с устройством Bluetooth через RFCOMM завершается сбоем в Linux/Bluez с отказом в соединении при вызове connect(s, (struct sockaddr *)&addr, sizeof(addr));
. Устройство было успешно сопряжено. Соединение RFCOMM с этим устройством из Android или Windows может быть успешно установлено, поэтому проблема, похоже, связана с Bluez diver и/или blueotoothd.
В Linux/Bluez трассировки bluetoothctl и Wireshark показывают, что он сначала подключается, а затем примерно через 2 секунды происходит отключение. Причина отключения не ясна.
Та же проблема возникает с различными выпусками Linux на ПК с USB Bluetooth (Linux ubuntu 4.15.0-33-generic #36~16.04.1-Ubuntu SMP, среда, 15 августа, 17:21:05 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux) или Raspberry Pi 3 (Джесси, Стретч).
Я проверил множество других тем с такой же/похожей проблемой. Большинство не имеют или не имеют четкого ответа.
На снимке экрана трассировки Wireshark показано отключение через 2,2 секунды.
Соответствующий вывод системного журнала bluetoothd:
Aug 31 16:43:54 ubuntu bluetoothd[926]: src/adapter.c:connected_callback() hci0 device F6:65:0A:E5:DE:E1 connected eir_len 22
Aug 31 16:43:54 ubuntu bluetoothd[926]: src/device.c:device_create() dst F6:65:0A:E5:DE:E1
Aug 31 16:43:54 ubuntu bluetoothd[926]: src/device.c:device_new() address F6:65:0A:E5:DE:E1
Aug 31 16:43:55 ubuntu bluetoothd[926]: src/device.c:device_new() Creating device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:dev_disconnected() Device F6:65:0A:E5:DE:E1 disconnected, reason 3
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:adapter_remove_connection()
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:adapter_remove_connection() Removing temporary device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/device.c:device_remove() Removing device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/device.c:btd_device_unref() Freeing device /org/bluez/hci0/dev_F6_65_0A_E5_DE_E1
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/device.c:device_free() 0x563aa2a270a0
Aug 31 16:43:57 ubuntu bluetoothd[926]: plugins/policy.c:disconnect_cb() reason 3
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr F6:65:0A:E5:DE:E1 type 0 status 0xe
Aug 31 16:43:57 ubuntu bluetoothd[926]: src/adapter.c:resume_discovery()
reason 3
указывает на MGMT_DEV_DISCONN_REMOTE. /net/bluetooth/mgmt.h исходников ядра. Это будет означать, что это устройство инициирует отключение. Но выделенная строка в трассировке Wireshark показывает, что именно хост инициирует отключение.
Большое спасибо за любую помощь заранее.