Ce n'est pas bon d'envoyer une structure en C directement dans une socket, car en C, selon le mode de compilation et la plateforme cible, les variables peuvent s'aligner différemment (sur 2, 4 octets ou autres).
exemple: sur un alignement sur 4 octets {int,short,short} prend 8 octets, mais {int,short} prend également 8 octet (car 6 n'est pas un multiple de 4). C'est donc une origine de bugs pas forcément visible au début.
Donc, il ne faut jamais envoyer une structure dans un flux de données sérialisés, d'autant plus que les sockets permettent de communiquer des architecture totalement différentes !
En pratique, in faut tout mettre à plat dans un buffer et envoyer le buffer.
Pour faire propre, de chaque côté du tuyau, il faut voir la même chose. L'idéal est de bien spécifier le format du buffer, et faire des constantes pour définir les offsets et tailles des morceaux du buffer.