es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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í?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El código de ejemplo realiza una conversión de tipo de struct sockaddr_in a struct sockaddr. Esto se hace para que la función bind(), que requiere un argumento de tipo struct sockaddr, pueda ser utilizada con el objeto struct 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 que struct sockaddr, por lo que los campos adicionales simplemente se ignoran cuando se realiza la conversión de tipo.

Comments are closed.