C
Du könntest mit WSAEventSelect das Socket mit einem Event verbinden. Dann brauchst du noch ein 2. Event "SouldBeStopped", das der Hauptthread setzt, wenn der ChildThread aufhören soll.
Dann listen aufrufen, danach mit WaitForMultipleObjects auf eines der beiden Events warten. Je nach dem, welches zuerst auftritt, den Thread entweder beenden oder eine Verbindung aufbauen.
Übrigens: CreateThread ist böse, falls du irgendeine Funktion aus der C oder C++ Standard-Lib verwendest. Nimm _beginthread, das ist sicherer.