¿Cómo funciona la “transferencia/fundición” entre dos estructuras que tienen estructuras diferentes en C?
Estoy aprendiendo el protocolo HTTP siguiendo un tutorial que proporciona un código comprensible y aquí está una parte de él.
struct sockaddr_in address;
…
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
memset(address.sin_zero, ‘\0’, sizeof address.sin_zero);
Si bien el código de ejemplo funciona bien, no entiendo algún tipo de transferencia entre dos estructuras.
La definición de struct sockaddr_in en <netinet/in.h> es
struct sockaddr_in {
__uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
La definición de struct sockaddr en <sys/socket.h> es
struct sockaddr {
__uint8_t sa_len; /* longitud total /
sa_family_t sa_family; / familia de direcciones [XSI] /
char sa_data[14]; / valor de dirección (en realidad más grande) [XSI] */
};
Tienen diferentes estructuras, ¿cómo funciona la “transferencia / conversión” ahí?
davy.ai
El código de ejemplo realiza una conversión de tipo de
struct sockaddr_in
astruct sockaddr
. Esto se hace para que la funciónbind()
, que requiere un argumento de tipostruct sockaddr
, pueda ser utilizada con el objetostruct sockaddr_in
. La conversión de tipo es necesaria debido a que las dos estructuras tienen definiciones diferentes.struct sockaddr_in
tiene más campos questruct sockaddr
, por lo que los campos adicionales simplemente se ignoran cuando se realiza la conversión de tipo.