2 votes

Est-ce que `recv` fonctionne avec des octets ou des octets, ou est-ce que c'est la même chose dans le contexte de la documentation POSIX ?

Lecture de la référence POSIX pour socket send à l'adresse http://pubs.opengroup.org/onlinepubs/009695399/functions/send.html Je me demande ce qu'ils entendent exactement par "octet" - sa signification traditionnelle/historique, sa signification implicite/populaire, ou quelque chose d'entièrement différent ? Je suis en train de développer un programme client-serveur de protocole réseau binaire supporté par TCP/IP, et je voudrais déclarer correctement mon tampon que j'utilise pour transmettre à recv et être capable de décompacter correctement ses données.

Oui, je sais qu'il s'agit d'une question presque hypothétique et qu'il y a probablement une chance sur un million de rencontrer des problèmes réels, mais mieux vaut prévenir que guérir, je suppose.

Alors, est-ce que les gars de POSIX veulent vraiment parler d'octets, ou est-ce qu'ils sous-entendent que pour les plateformes où un octet est disons de 7 bits, send traitera des tableaux d'une granularité de 7*N ? Ou peut-être transférera-t-il simplement toutes les données, bit par bit (granularité de la taille) ? (7 * n_bytes) bits) ? Je veux dire, puisqu'il s'attend à un void * tampon...

Quelle déclaration pour mon recv Le tampon serait le plus stable sur les architectures et les compilateurs ?

J'utilise GCC avec les drapeaux suivants (C99, POSIX) :

cc -g -Wall -Wextra -std=c99 -pedantic -fexec-charset=ISO-8859-1 -DDEBUG -D_POSIX_C_SOURCE

2voto

Basile Starynkevitch Points 67055

Je crois que l'octet est le char type de C, le plus petit entier possible contenant un caractère, tel que supporté par le système. (peut-être qu'un compilateur étrange et un système cible ont des caractères non 8 bits). char ).

octet signifie un octet de 8 bits.

Si vous pensez en termes de TCP/IP, je crois (IIRC) qu'il définit les différents protocoles en termes d'octets de 8 bits. Le TCP est constitué de la transmission de multiples octets de 8 bits.

Mais en réalité, vous ne devriez pas vous en soucier autant. Peut-être que documenter votre protocole en termes de bits pourrait vous aider. Beaucoup de choses peuvent rendre votre protocole obsolète (il suffit de penser à IPv6). Si votre protocole est vraiment précieux et utile, et bien documenté, quelqu'un le fera vivre et l'adaptera.

2voto

ninjalj Points 22026

POSIX définit un octet comme étant la taille d'un octet, et définit un octet comme étant 8 bits contigus. Ces définitions se trouvent au chapitre 3 de la norme POSIX. La dernière norme POSIX (2008) se trouve à l'adresse suivante http://pubs.opengroup.org/onlinepubs/9699919799/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X