C'e' anche da dire che in questo ciclo

codice:
while(TRUE)
{
   iBytes = recv(sServerSock,pBuffer,2000,0);
   pBuffer[iBytes] = '\0';
   printf("%s",pBuffer);
   if(pBuffer[iBytes-1] == '>') break;
}
se la recv non opera correttamente (per un qualsiasi motivo) e restituisce un errore, tale errore non viene testato e il codice restituito (iBytes) viene comunque considerato un valore valido, con ovvie conseguenze.