Existen dos tipos de ordenamiento de bytes: bytes más significativos, y bytes menos significativos. Éste es llamado “Ordenación de Bytes para Redes”[1], algunas máquinas utilizan este tipo de ordenación para guardar sus datos internamente.
Existen dos tipos a los cuales seremos capaces de convertir: short y long [2]. Imaginémonos que se quiere convertir una variable larga de Ordenación de Bytes para Nodos a una de Orden de Bytes para Redes. ¿Qué haríamos? Existe una función llamada htonl() que haría exactamente esta conversión. Las siguientes funciones son análogas a ésta y se encargan de hacer este tipo de conversiones:
htons() -> ``Nodo a variable corta de Red''
htonl() -> ``Nodo a variable larga de Red''
ntohs() -> ``Red a variable corta de Nodo''
ntohl() -> ``Red a variable larga de Nodo''
Estarás pensando ahora para qué necesitamos todas estas funciones, y el porqué de estos ordenamientos. Bien, cuando se termine de leer este documento todas estas dudas se aclararán (aunque sea un poco). Todo lo que necesitará es leer y practicar mucho.
Una cosa importante, es que sin_addr y sin_port, de la estructura sockaddr_in, deben ser del tipo Ordenación de Bytes para Redes. Se verá, en los ejemplos, las funciones que aquí se describen para realizar estas conversiones, y a ese punto se entenderán mucho mejor.
[1] | que es la traducción al español de Network Byte Order. El término también es conocido como “Big-Endian Byte Order”. Tener en cuenta que, si no se habla de Ordenación de Bytes para Redes, se hablará de Ordenación de Bytes para Nodos. Nota del T. |
[2] | los cuales ocupan 2 y 4 bytes de memoria, respectivamente. |