gatttool コードを変更する準備ができている場合は、Bluez の接続ソケットにタイムアウトを追加する必要があります。
再試行をブロックしないようにするために、GattLibを作成したときに同じ回避策を実行する必要がありました。
このコミットで私の変更を確認できます: https://github.com/labapart/gattlib/commit/ee58e4cb64af6c698dea1fabb5b6d5e0fc174883
ただし、主な変更点は次の行です。
if (setsockopt (sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
fprintf(stderr, "l2cap_connect: Failed to setsockopt for receive timeout.\n");
return -1;
}
if (setsockopt (sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0) {
fprintf(stderr, "l2cap_connect: Failed to setsockopt for sending timeout.\n");
return -1;
}
ble_scan
独自のコードを書きたい場合は、GattLib の例に興味があるかもしれません。