В общем сокеты нормально работают только при переводе их в неблокирующий режим и при чтении и записи с флагом SOCKET_MSG_DONTWAIT, иначе цикл исполнения программы увеличивается т.к SysSockRecv ждет пакетов. Но вопрос про то, как узнать что кабель оторван остается открытым.
Можно, конечно закрывать сокеты по таймауту, мол не обращаются к нам какое то время - закрываем клиентский сокет. попробую отпишусь.