Ты решаешь несуществующую проблему. Сколько в сокет запихнулось,
столько и будет доставлено. Но не забыть проверить, в каких-то случаях может быть запихнуто меньше чем ты попросил.
Возврат функции обычно говорит сколько по факту уйдёт на передачу, остальное нужно будет скормить в следующем вызове.
while(totallen){
len = totallen;
WCHNET_SocketSend(id, p, &len); //Send the data
totallen -= len; //Subtract the sent length from the total length
p += len; //offset buffer pointer
if( !--TransCnt ) break; //Timeout exit
}