Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid bluetooth connection error (no bt sock found, scn 1) - infinite loop
    primarykey
    data
    text
    <p>I am facing the same problem as in a previous (and unanswered) question, I was hesitating to edit it, as I want to add a lot more information. So here is the related question : <a href="https://stackoverflow.com/q/7704505/1177834">Android bluetooth connection fails (Error: no bt sock found, scn 1)</a>.</p> <p>The error occurs while attempting to make a Bluetooth connection. I doesn't always occur (why ?), but it is quite frequent. I am writing this app for Android 2.3 with Eclipse Indigo.</p> <p>Here is the log I get while doing the connection before having the error (it seems like the connection succeeds before the error occurs) :</p> <pre><code>03-29 15:14:52.205: D/BLZ20_ASOCKWRP(22027): asocket_connect 03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): blz20_wrp_connect: s 53 03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): blz20_wrp_connect: fd (-1:53), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): __connect_prot_rfcomm: connecting to... 0440201b0800, rc chan 1 03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): __connect_prot_rfcomm: non blocking mode 03-29 15:14:52.205: I/BTL_IFC(22027): send_ctrl_msg: [BTL_IFC CTRL] send BTLIF_BTS_RFC_CON_REQ (BTS) 23 pbytes (hdl 52) 03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): blz20_wrp_connect: success 03-29 15:14:52.205: I/BLZ20_WRAPPER(22027): blz20_wrp_poll: nfds 2, timeout -1 ms 03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): blz20_wrp_poll: pending connect fd (-1:53), bta -1, rc 1, wflags 0x0, cflags 0x1, port 0 03-29 15:14:52.205: D/BLZ20_WRAPPER(22027): btlif_wait_response: id(s) |BTLIF_BTS_RFC_CON_RSP|BTLIF_BTS_RFC_DISC_IND| 03-29 15:14:52.920: I/BTL_IFC(22027): btl_ifc_ctrl_rx: [BTL_IFC CTRL] recv BTLIF_BTS_RFC_CON_RSP (BTS) 22 pbytes (hdl 52) 03-29 15:14:52.920: I/BLZ20_WRAPPER(22027): btlif_ctrl_callback: btlif_ctrl_callback : msg id BTLIF_BTS_RFC_CON_RSP 03-29 15:14:52.920: E/BLZ20_WRAPPER(22027): ##### ERROR : btlif_process_con_rsp: no bt sock found, scn 1##### </code></pre> <p>And here is the log I get while the connection just fails (but no error)</p> <pre><code>03-29 15:20:37.100: D/BLZ20_ASOCKWRP(22027): asocket_abort [44,45,46] 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: s 44, how 2 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: fd (-1:44), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: shutdown socket 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_write: wrote 1 bytes out of 1 on fd 46 03-29 15:20:37.100: D/BLZ20_ASOCKWRP(22027): asocket_destroy 03-29 15:20:37.100: D/BLZ20_ASOCKWRP(22027): asocket_abort [44,45,46] 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: s 44, how 2 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: fd (-1:44), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_shutdown: shutdown socket 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_write: wrote 1 bytes out of 1 on fd 46 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_close: s 46 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_close: std close (46) 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_close: s 45 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_close: std close (45) 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): blz20_wrp_close: s 44 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): blz20_wrp_close: fd (-1:44), bta -1, rc 0, wflags 0x0, cflags 0x0, port 0 03-29 15:20:37.100: I/BLZ20_WRAPPER(22027): __close_prot_rfcomm: fd 44 03-29 15:20:37.100: I/BTL_IFC(22027): send_ctrl_msg: [BTL_IFC CTRL] send BTLIF_BTS_RFC_CLOSE (BTS) 8 pbytes (hdl 52) 03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wrp_close_s_only: wrp_close_s_only [44] (44:-1) [] 03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wrp_close_s_only: data socket closed 03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wsactive_del: delete wsock 44 from active list [ad439320] 03-29 15:20:37.100: D/BTL_IFC_WRP(22027): wrp_close_s_only: wsock fully closed, return to pool 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): btsk_dump_list: fd (-1:53), bta -1, rc 1, wflags 0x900, cflags 0x0, port 0 03-29 15:20:37.100: D/BLZ20_WRAPPER(22027): btsk_free: success </code></pre> <p>While debugging I have figured out that the <code>ConnectThread</code> used for making the connection keeps running in the case of the error, which means it has entered an infinite loop. Hence if another <code>Thread</code> tries to cancel and finish this <code>ConnectThread</code>, the application will crash.</p> <p>See here the source code of this <code>ConnectThread</code> which is an inner class of a <code>Service</code> (very similar to BluetoothChat sample):</p> <pre><code>/** * This thread runs while attempting to make an outgoing connection * with a device. It runs straight through; the connection either * succeeds or fails. */ private class ConnectThread extends Thread { private final BluetoothSocket mmSocket; private final BluetoothDevice mmDevice; public ConnectThread(BluetoothDevice device) { mmDevice = device; // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null; // Get a BluetoothSocket to connect with the given BluetoothDevice try { // SerialPortServiceClass_UUID is the app's UUID string, also // used by the server code tmp = device.createRfcommSocketToServiceRecord(SerialPortServiceClass_UUID); } catch (IOException e) { if (D) Log.e(TAG, "create RFCOMM failed", e); // here I do something to notify the UI that the connection has failed // Reset the ConnectThread because the connection has failed synchronized (DataReceiverService.this) { mConnectThread = null; } } mmSocket = tmp; } public void run() { if (D) Log.i(TAG, "BEGIN mConnectThread"); setName("ConnectThread"); // Cancel discovery because it will slow down the connection mBtAdapter.cancelDiscovery(); try { // Connect the device through the socket. This will block // until it succeeds or throws an exception mmSocket.connect(); } catch (IOException connectException) { // Unable to connect, close the socket and get out try { mmSocket.close(); } catch (IOException closeException) { if (D) Log.e(TAG, "unable to close() socket during connection failure", closeException); } // here I do something to notify the UI that the connection has fqiled return; } // Reset the ConnectThread because we're done synchronized (DataReceiverService.this) { mConnectThread = null; } // Do work to manage the connection (in the ConnectedThread) connected(mmSocket, mmDevice); } /** Will cancel an in-progress connection, and close the socket */ public void cancel() { try { mmSocket.close(); } catch (IOException e) { if (D) Log.e(TAG, "close() of connect socket failed", e); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload