I'm using an AF_BLUETOOTH socket bound with HCI_CHANNEL_USER from a
user-mode application with cap_net_admin=ep. As expected this
requires the device be down, and brings the device up automatically.
When I close that socket and exit the application, the device appears
to remain up forever. Which prevents me from re-starting the
application.
I tried to issue HCIDEVDOWN before closing, but that produces EBADFD
because ioctls cannot be performed with HCI_CHANNEL_RAW.
I can bring the interface down from within the application if, after
closing the socket, I wait a second or so, then create a new bound
HCI_CHANNEL_RAW socket and issue HCIDEVDOWN on it.
Is there some other way to cleanly shut down an application that used
HCI_CHANNEL_USER so that the device is returned to down state on exit?
Or is this supposed to happen automatically (I see code that suggests
it should)?
Kernel version is 5.11.0-7620-generic (System76), and I'm using go
1.16, if that's relevant.
Thanks!
Peter