Adafruit CC3000 Timeout bei Client connect

Guten Tag zusammen,
ich beschäftige mich gerade wieder ein wenig intensiver mit dem CC3000 Modul von Adafruit.
An sich funktioniert auch alles, nur würde ich gerne einen Timeout für einen TCP Client beim connect haben. In der Standard Konfiguration wartet er so lange bis er eine Verbindung hat.
Selbst wenn die IP im Netzwerk nicht existiert scheint er das nicht mitzubekommen und wartet unendlich.
Also mal in den Code geschaut und von der "connectTCP" Funktion aus immer tiefer verfolgt.
Hier einmal kurz der Weg den ich hinbekommen habe (Leider nicht sehr weit):
Adafruit_CC3000.cpp:connectTCP -> utility/socket.cpp:connect -> utility/evnt_handler.cpp: SimpleLinkWaitEvent -> utility/evnt_handler.cpp: hci_event_handler

Ab dort macht der Code für mich kein wirklichen Sinn mehr.
Allerdings finde ich, dass der Funktionsname "SimpleLinkWaitEvent" schon sehr viel aussagt.
Da ich dort nicht weitergekommen bin habe ich die Library mal nach "TIMEOUT/timeout" durchsucht und siehe da: Direkt in der utility/socket.cpp wird in der ersten Zeile folgendes definiert:

#define SEND_TIMEOUT_MS (30 * 1000)

Also mal danach weitergesucht.
Dieses Macro wird nur in der Funktion "utility/socket.cpp:INT16 HostFlowControlConsumeBuff(INT16 sd)" benutzt und dort gibt es auch folgenden Kommentar:

/* wait in busy loop */

// Adafruit CC3k Host Driver Difference
// Allow defining a send timeout period.

Diese Sektion wird aber nur benutzt, wenn SEND_NON_BLOCKING undefiniert ist.
Also einfach mal vor das "#ifndef SEND_NON_BLOCKING" ein "#undef SEND_NON_BLOCKING" setzen.
Aber leider half es nichts. Er blockiert das Programm immer noch solange, wie er keine Verbindung bekommt.
Hat jemand noch eine Idee wo man noch nachschauen könnte?

Hier mal die Funktion (die, wie ich finde, am vielversprechendsten aussieht) HostFlowControlConsumeBuff:

INT16 HostFlowControlConsumeBuff(INT16 sd)
{
#ifndef SEND_NON_BLOCKING
	/* wait in busy loop */

// Adafruit CC3k Host Driver Difference
// Allow defining a send timeout period.
// Noted 12-12-2014 by tdicola
#ifdef SEND_TIMEOUT_MS
	unsigned long startTime = millis();
#endif

	do
	{
		// In case last transmission failed then we will return the last failure 
		// reason here.
		// Note that the buffer will not be allocated in this case
		if (tSLInformation.slTransmitDataError != 0)
		{
			errno = tSLInformation.slTransmitDataError;
			tSLInformation.slTransmitDataError = 0;
			return errno;
		}

		if(SOCKET_STATUS_ACTIVE != get_socket_active_status(sd))
			return -1;

// Adafruit CC3k Host Driver Difference
// Implementation of send timeout.
// Noted 12-12-2014 by tdicola
#ifdef SEND_TIMEOUT_MS
		if ((millis() - startTime) > SEND_TIMEOUT_MS)
		{
			return -3; /* Timeout */
		}
#endif

		// Adafruit CC3k Host Driver Difference
		// Poll CC3k for available bytes with select during buffer wait.
		// Noted 04-06-2015 by tdicola
		// This is a bizarre change that majorly helps reliability in the later
		// Arduino 1.6.x IDE and its newer avr-gcc toolchain.  Without the select
		// call the CC3k will frequently get stuck in this loop waiting for a buffer
		// to be free to send data and the CC3k never sending the async event
		// that buffers are free.  It is unclear why calling select fixes this
		// issue but my suspicion is it might be making the CC3k realize there
		// are free buffers and it passing the async event along that will
		// eventually break out of this loop.  I tried to check if it was just a
		// timing issue by substituting a small delay for the select call, but 
		// the problem persists.  Calling select appears to be necessary to keep
		// the CC3k from hitting some race condition/issue here.
		if (tSLInformation.usNumberOfFreeBuffers == 0) {
			// Do a select() call on the socket to see if data is available to read.
			timeval timeout;
			fd_set fd_read;
			memset(&fd_read, 0, sizeof(fd_read));
			FD_SET(sd, &fd_read);
			timeout.tv_sec = 0;
			timeout.tv_usec = 5000;
			select(sd+1, &fd_read, NULL, NULL, &timeout);
			// Note the results of the select are ignored for now.  Attempts to
			// have smart behavior like returning an error when there is data
			// to read and no free buffers for sending just seem to cause more
			// problems particularly with server code examples.
		}

	} while(0 == tSLInformation.usNumberOfFreeBuffers);

	tSLInformation.usNumberOfFreeBuffers--;

	return 0;
#else

	// In case last transmission failed then we will return the last failure 
	// reason here.
	// Note that the buffer will not be allocated in this case
	if (tSLInformation.slTransmitDataError != 0)
	{
		errno = tSLInformation.slTransmitDataError;
		tSLInformation.slTransmitDataError = 0;
		return errno;
	}
	if(SOCKET_STATUS_ACTIVE != get_socket_active_status(sd))
		return -1;

	//If there are no available buffers, return -2. It is recommended to use  
	// select or receive to see if there is any buffer occupied with received data
	// If so, call receive() to release the buffer.
	if(0 == tSLInformation.usNumberOfFreeBuffers)
	{
		return -2;
	}
	else
	{
		tSLInformation.usNumberOfFreeBuffers--;
		return 0;
	}
#endif
}