Bluetooth 관련 통신을 하고 있는데 소켓 생성 부분에서 IOException (Bad file number) 가 발생하고 있습니다.

그런데 해결 방법을 잘 모르겠어서 문의 드립니다.


// 소켓 생성 부분

private void connectBluetooth() throws IOException
{
	if(mServerSocket == null)
	{
		mServerSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("BluetoothChat", MY_UUID); // Exception 발생하는 부분
	        mBluetoothAdapter.getState();
	}
	mBluetoothSocket = mServerSocket.accept();
	mInputStream = mBluetoothSocket.getInputStream();
	mOutputStream = mBluetoothSocket.getOutputStream();
}


// 연결 종료하는 부분

private void disconnectBluetooth() throws IOException
{
	if(mInputStream != null)
	{
		mInputStream.close();
		mInputStream = null;
	}

	if(mOutputStream != null)
	{
		mOutputStream.close();
		mOutputStream = null;
	}

	if(mBluetoothSocket != null)
	{
		mBluetoothSocket.close();
		mBluetoothSocket = null;
	}

	if (mServerSocket != null)
	{
		mServerSocket.close();
		mServerSocket = null;
	}
}

이게 처음 연결 시작할때부터 발생하는 에러는 아니고,

연결 했다 끊었다를 몇차례 반복하면 발생합니다.


10-22 20:52:43.110: E/SPP(4771):   ++ connect() error = Bad file number


에러 발생시 로그는 위와 같은데, 에러 로그가 찍히기 직전까지는 정상 동작시와 동일한 로그를 출력하고 있습니다.

혹시 RFCOMM 관련 소켓 갯수에 제한이 있어서 그 소켓이 제대로 close 되지 않아 갯수 초과해서 발생하는 문제인가요?
그렇다면 close() 메쏘드 호출 말고 확실히 종료 시킬 수 있는 방법이 있는지 궁금합니다.

안드로이드 버전 2.3 대에서 자주 발생하는 것 같고, ICS 이상 버전 (갤럭시S3) 에서는 현상이 나타나지 않네요.

답변 부탁 드립니다.
감사합니다.