title: Android: Bluetooth failed to get port number
body: <p>I'm running into a problem using Bluetooth in my app. It seems that after 28 <code>BluetoothSocket</code>/<code>BluetoothServerSockets</code> have been created, all of the ports are taken. The sockets don't need to be opened simultaneously, it's just 28 sockets since Bluetooth was enabled. </p>
  
  <p>This can be reproduced using the BluetoothChat sample provided in the <a href="http://developer.android.com/tools/samples/index.html" rel="noreferrer" title="Android Samples">Android Samples</a>. Simply open and close the app 15 times (the app creates 2 sockets each time). On the 15th time, it will crash and will continue to crash until you disable and then re-enable Bluetooth:</p>
  
  <pre><code>12-06 18:43:58.177: E/BluetoothSocket(18530): bindListen, fail to get port number, exception: java.io.IOException: read failed, socket might closed, read ret: -1
  12-06 18:43:58.193: E/BluetoothChatService(18530): Socket Type: Insecurelisten() failed
  12-06 18:43:58.193: E/BluetoothChatService(18530): java.io.IOException: Error: -1
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.bluetooth.BluetoothAdapter.createNewRfcommSocketAndRecord(BluetoothAdapter.java:1035)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.bluetooth.BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(BluetoothAdapter.java:982)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at com.example.android.BluetoothChat.BluetoothChatService$AcceptThread.&lt;init&gt;(BluetoothChatService.java:280)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at com.example.android.BluetoothChat.BluetoothChatService.start(BluetoothChatService.java:119)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at com.example.android.BluetoothChat.BluetoothChat.onResume(BluetoothChat.java:131)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.Activity.performResume(Activity.java:5182)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.os.Handler.dispatchMessage(Handler.java:99)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.os.Looper.loop(Looper.java:137)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at android.app.ActivityThread.main(ActivityThread.java:5039)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at java.lang.reflect.Method.invokeNative(Native Method)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at java.lang.reflect.Method.invoke(Method.java:511)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  12-06 18:43:58.193: E/BluetoothChatService(18530):  at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>Is there any way to free the ports after the socket is closed?</p>