Solo un comentario antes de dar por solucionado el tema. No hace falta hacerle un cast (void*). Si tu tienes un buffer de unsigned short int (16bits, rango 0-65535) tan solo tienes que usar la siguiente funcion para que te lo guarde correctamente:
Código:
unsigned short int buffer;
recv (fdSocket, &buffer, 2, 0);
Nada mas. Con esto se leeran correctamente los 16 bits del unsigned short int.