Structure de sockaddr – (sys / socket.h)

J’ai lu le fichier sys / socket.h toute la journée et enfin commencé à le comprendre. Je commence maintenant à l’utiliser, cependant, je ne sais pas pourquoi je ne peux pas atsortingbuer une valeur au membre sa_family de la structure sockaddr .

Spécification sockaddr Structure:

 struct sockaddr{ sa_family_t sa_family address family char sa_data[] socket address (variable-length data) }; 

Type de données: sa_family_t – Type intégral non signé (2-4 octets)

Valeurs:

 Name Purpose Man page AF_UNIX, AF_LOCAL Local communication unix(7) AF_INET IPv4 Internet protocols ip(7) AF_INET6 IPv6 Internet protocols ipv6(7) AF_IPX IPX - Novell protocols AF_NETLINK Kernel user interface device netlink(7) AF_X25 ITU-T X.25 / ISO-8208 protocol x25(7) AF_AX25 Amateur radio AX.25 protocol AF_ATMPVC Access to raw ATM PVCs AF_APPLETALK AppleTalk ddp(7) AF_PACKET Low level packet interface packet(7) AF_ALG Interface to kernel crypto API 

Ce qui est un peu déroutant puisque ces valeurs sont des types de données char pas un unsigned int .

Test simple:

 #include #include int main(void){ struct sockaddr_in address; address.sin_family = AF_INET; printf("Socket Address Family: %s\n", address.sin_family); return 0; } 

Erreur:

storage size of 'address' isn't known

Il devrait imprimer la Socket Address Family: AF_INET … que me manque-t-il ici?

C’est parce que vous n’incluez pas la définition de cette structure. La structure sockaddr_in est définie dans . Pour plus de détails, voir: sockaddr_in identifiant non déclaré