Index: /source/ariba/utility/transport/rfcomm/rfcomm.cpp
===================================================================
--- /source/ariba/utility/transport/rfcomm/rfcomm.cpp	(revision 5626)
+++ /source/ariba/utility/transport/rfcomm/rfcomm.cpp	(revision 5627)
@@ -33,5 +33,5 @@
 public:
 	link_info(io_service& io ) :
-		io(io), up(false), local(), remote(), socket(new bluetooth::rfcomm::socket(io)), connect_retries(0),
+		io(io), up(false), connecting(false), local(), remote(), socket(new bluetooth::rfcomm::socket(io)), connect_retries(0),
 		size(0), buffer(NULL), sending(false) {
 	}
@@ -51,4 +51,5 @@
 	// state
 	bool up;
+	bool connecting;
 	rfcomm_endpoint local, remote;
 	bluetooth::rfcomm::socket* socket;
@@ -136,5 +137,5 @@
 
 	// not found, or not up? ->try to (re-)connect
-	if (info==NULL || !info->up || !info->socket->is_open() ) {
+	if (info==NULL || ((!info->up || !info->socket->is_open()) && !info->connecting) ) {
 		logging_debug( "Connecting to " << endpoint.to_string() );
 		if (info != NULL && (!info->up || !info->socket->is_open())) {
@@ -146,8 +147,10 @@
 		info->connect_retries = 0;
 		info->remote = endpoint;
+		info->connecting = true;
 		info->socket->async_connect( convert(endpoint), boost::bind(
 			&rfcomm::handle_connect, this,
 			boost::asio::placeholders::error, info
 		));
+		links.push_back(info);
 	}
 
@@ -260,4 +263,5 @@
 		if (info->connect_retries<3) {
 			// increase counter
+			info->connecting = false;
 			info->connect_retries++;
 			info->reinit();
@@ -276,4 +280,5 @@
 	// convert endpoints
 	info->up = true;
+	info->connecting = false;
 	info->local  = convert( info->socket->local_endpoint()  );
 	info->remote = convert( info->socket->remote_endpoint() );
