it-swarm.com.de

RFCOMM TTY kann nicht erstellt werden: Adresse wird bereits verwendet

Ich höre auf meinem Server nach einer Bluetooth-Verbindung, und zwar:

rfcomm listen rfcomm1 1

Dann stelle ich eine Verbindung mit meinem Bluetooth-Client her und die folgende Meldung wird angezeigt:

Connection from XX:XX:XX:XX:XX:XX to /dev/rfcomm1
Press CTRL-C for hangup

Das bedeutet, dass alles in Ordnung ist ...

Dann beende ich meine Verbindung mit Strg + C im Server oder im Client.

Danach mache ich nochmal:

rfcomm listen rfcomm1 1

Dieses Mal erhalte ich beim Verbinden des Clients diese Nachricht:

Can't create RFCOMM TTY: Address already in use

Also gehe ich und überprüfe, welche Verbindungen offen sind:

rfcomm -a

Und ich kann sehen, dass die Verbindung als geschlossen erscheint, aber nicht einmal getrennt werden sollte ...

rfcomm1: XX:XX:XX:XX:XX:XX -> XX:XX:XX:XX:XX:XX channel 1 closed [reuse-dlc release-on-hup ]

Das seltsamste ist, dass manchmal die Verbindung erfolgreich ist und ich die Verbindung problemlos wieder herstellen kann.

EDIT

Ich stellte fest, dass die Verbindung erfolgreich hergestellt wird, wenn das Gerät etwa 10 Sekunden oder länger verbunden bleibt. Wenn diese Zeit jedoch kürzer ist (schnelle Verbindung/Trennung), tritt das Problem auf. 

Und wenn der Fehler auftritt, mache ich:

dmesg

Dies ist gedruckt:

[11800.001527] Bluetooth: TIOCGSERIAL is not supported
[11800.033063] Bluetooth: TIOCGSERIAL is not supported
[11926.708438] Bluetooth: TIOCGSERIAL is not supported
[11934.918197] Bluetooth: TIOCGSERIAL is not supported
[11934.926194] Bluetooth: TIOCGSERIAL is not supported
[11934.926284] ------------[ cut here ]------------
[11934.926297] WARNING: CPU: 1 PID: 2316 at /build/linux-Pcn0xK/linux-4.4.0/drivers/tty/tty_port.c:143 tty_port_destructor+0x7a/0x80()
[11934.926300] Modules linked in: minidriver(OE) nls_utf8 isofs rfcomm bnep arc4 ath5k snd_hda_codec_realtek uvcvideo ath mac80211 snd_hda_codec_hdmi snd_hda_codec_generic snd_hda_intel videobuf2_vmalloc snd_hda_codec samsung_laptop videobuf2_memops snd_hda_core btusb videobuf2_v4l2 btrtl snd_hwdep videobuf2_core coretemp btbcm cfg80211 snd_pcm v4l2_common btintel snd_seq_midi joydev videodev bluetooth snd_seq_midi_event serio_raw media snd_rawmidi input_leds snd_seq snd_seq_device snd_timer snd soundcore shpchp lpc_ich mac_hid binfmt_misc parport_pc ppdev lp parport autofs4 hid_logitech ff_memless uas usb_storage hid_generic usbhid hid amdkfd AMD_iommu_v2 radeon psmouse pata_acpi i2c_algo_bit ttm sky2 drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops video fjes drm [last unloaded: minidriver]

[11934.926401] CPU: 1 PID: 2316 Comm: kworker/1:1 Tainted: G        W  OE   4.4.0-97-generic #120-Ubuntu
[11934.926404] Hardware name: SAMSUNG ELECTRONICS CO., LTD. R520/R522/R620               /R520/R522/R620               , BIOS 05LL.M025.20090916.Jay 09/16/20
[11934.926410] Workqueue: events release_one_tty
[11934.926413]  0000000000000286 c977cef9c84bca31 ffff88012ea3fd48 ffffffff813fabe3
[11934.926419]  0000000000000000 ffffffff81d386c0 ffff88012ea3fd80 ffffffff810812e2
[11934.926425]  ffff8800b5153800 ffff8800b67f6400 ffff8800b67f6400 ffffffffc06dc840
[11934.926430] Call Trace:
[11934.926438]  [<ffffffff813fabe3>] dump_stack+0x63/0x90
[11934.926445]  [<ffffffff810812e2>] warn_slowpath_common+0x82/0xc0
[11934.926450]  [<ffffffff8108142a>] warn_slowpath_null+0x1a/0x20
[11934.926455]  [<ffffffff8150357a>] tty_port_destructor+0x7a/0x80
[11934.926460]  [<ffffffff81503ce8>] tty_port_put+0x28/0x30
[11934.926471]  [<ffffffffc06d5fa8>] rfcomm_tty_cleanup+0x68/0x70 [rfcomm]
[11934.926475]  [<ffffffff814f91fb>] release_one_tty+0x3b/0xc0
[11934.926481]  [<ffffffff8109a635>] process_one_work+0x165/0x480
[11934.926486]  [<ffffffff8109a99b>] worker_thread+0x4b/0x4c0
[11934.926491]  [<ffffffff8109a950>] ? process_one_work+0x480/0x480
[11934.926496]  [<ffffffff810a0c75>] kthread+0xe5/0x100
[11934.926500]  [<ffffffff810a0b90>] ? kthread_create_on_node+0x1e0/0x1e0
[11934.926507]  [<ffffffff81843b8f>] ret_from_fork+0x3f/0x70
[11934.926511]  [<ffffffff810a0b90>] ? kthread_create_on_node+0x1e0/0x1e0
[11934.926515] ---[ end trace a33c33d1fdbe410d ]---
[11936.001325] Bluetooth: TIOCGSERIAL is not supported
[11936.033194] Bluetooth: TIOCGSERIAL is not supported

Wenn alles gut funktioniert (10 oder mehr Sekunden), werden nur diese Meldungen angezeigt:

[11936.001325] Bluetooth: TIOCGSERIAL is not supported
[11936.033194] Bluetooth: TIOCGSERIAL is not supported
[11936.001325] Bluetooth: TIOCGSERIAL is not supported
[11936.033194] Bluetooth: TIOCGSERIAL is not supported
8
Sergio

LÖSUNG

Das Problem war ein in Ubuntu installiertes Paket, das die normale Version des Geräts störte.

Mach einfach:

apt-get remove --purge modemmanager
3
Sergio

In Anbetracht der Tatsache, dass es kein Problem gibt, wenn Sie 10 Sekunden warten, bevor Sie die Verbindung trennen, haben wir meiner Meinung nach einen festen Vorsprung: Die RFCOMM-Spezifikation ( https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=263754) ) definiert 10 Sekunden als Mindestzeitüberschreitung für Daten-ACKs ("Acknowledgement Timer (T1)") und Steuerkanalantworten ("Response Timer für Multiplexer-Steuerkanal (T2)"). Höchstwahrscheinlich haben Sie nicht freigegebene Daten auf dem Steuerkanal von Ihrem Client (klingt nicht so, als hätten Sie Daten gesendet). Obwohl ich nicht erwarten würde, dass dies beim Trennen der Verbindung Probleme verursacht, ist es wahrscheinlich, dass ein Problem innerhalb des BlueZ-Stapels Probleme verursacht, wenn Sie versuchen, das TTY freizugeben, während es auf diese ACK wartet.

  1. Haben Sie versucht, Daten auf dem Kanal zu senden? Wenn der Steuerkanal wirklich nicht ACK ist, wäre es überraschend, wenn Sie Daten austauschen können. 

  2. Haben Sie versucht, ein anderes Gerät als RFCOMM-Client zu verwenden? Möglicherweise liegt ein Problem im Stack auf der Clientseite nicht in ACKing-Steuersignalen. 

Ich habe nicht viel mit dem BlueZ-Stack gearbeitet, daher kann ich keine genauen Codeänderungen bereitstellen, aber hoffentlich reichen diese Informationen aus, um eine Problemumgehung zu formulieren (wenn Sie beispielsweise den Timer ermitteln können, der auf diesen ACK wartet Du könntest es töten.

4
Jacob Torres

Hast du es mit dem Release versucht?

Sudo rfcomm Release 0

Oder fügen Sie Ihr Gerät alternativ direkt in /etc/bluetooth/rfcomm ein, binden Sie es stattdessen und versuchen Sie es mit der Freigabe, nachdem Sie fertig sind.

Sudo rfcomm bind 0

4
Adam

Dieser Fehler tritt auf, weil ein Prozess den Port offen hält und nur freigibt, wenn der Port geschlossen ist.

So prüfen Sie, welches Gerät den Port nicht freigibt: Sudo lsof | grep/dev/rfcomm0 (oder welcher Port auch zugewiesen ist)

Die Antwort ist einfach: Schließen Sie den Kommunikationsport innerhalb der Anwendung und glückliche Tage!

0
robert