Socket Unix - Structures

Diverses structures sont utilisées dans la programmation de socket Unix pour contenir des informations sur l'adresse et le port, ainsi que d'autres informations. La plupart des fonctions de socket nécessitent un pointeur vers une structure d'adresse de socket comme argument. Les structures définies dans ce chapitre sont liées à la famille de protocoles Internet.

chaussette

La première structure est sockaddr qui contient les informations de socket -

struct sockaddr {
   unsigned short   sa_family;
   char             sa_data[14];
};

Il s'agit d'une structure d'adresse de socket générique, qui sera transmise dans la plupart des appels de fonction de socket. Le tableau suivant fournit une description des champs de membre -

Attribut Valeurs La description
sa_famille

AF_INET

AF_UNIX

AF_NS

AF_IMPLINK

Il représente une famille d'adresses. Dans la plupart des applications Internet, nous utilisons AF_INET.
sa_data Adresse spécifique au protocole Le contenu des 14 octets d'adresse spécifique au protocole est interprété en fonction du type d'adresse. Pour la famille Internet, nous utiliserons l'adresse IP du numéro de port, qui est représentée par la structure sockaddr_in définie ci-dessous.

sockaddr dans

La deuxième structure qui vous aide à faire référence aux éléments du socket est la suivante -

struct sockaddr_in {
   short int            sin_family;
   unsigned short int   sin_port;
   struct in_addr       sin_addr;
   unsigned char        sin_zero[8];
};

Voici la description des champs membres -

Attribut Valeurs La description
sa_famille

AF_INET

AF_UNIX

AF_NS

AF_IMPLINK

Il représente une famille d'adresses. Dans la plupart des applications Internet, nous utilisons AF_INET.
sin_port Port de service Un numéro de port 16 bits dans l'ordre des octets du réseau.
sin_addr Adresse IP Une adresse IP 32 bits dans l'ordre des octets du réseau.
sin_zero Non utilisé Vous venez de définir cette valeur sur NULL car cela n'est pas utilisé.

dans adr

Cette structure est utilisée uniquement dans la structure ci-dessus en tant que champ de structure et contient un netid / hostid 32 bits.

struct in_addr {
   unsigned long s_addr;
};

Voici la description des champs membres -

Attribut Valeurs La description
s_addr port de service Une adresse IP 32 bits dans l'ordre des octets du réseau.

hôte

Cette structure est utilisée pour conserver les informations relatives à l'hôte.

struct hostent {
   char *h_name; 
   char **h_aliases; 
   int h_addrtype;  
   int h_length;    
   char **h_addr_list
	
#define h_addr  h_addr_list[0]
};

Voici la description des champs membres -

Attribut Valeurs La description
h_name ti.com etc. C'est le nom officiel de l'hôte. Par exemple, tutorialspoint.com, google.com, etc.
h_aliases TI Il contient une liste d'alias de nom d'hôte.
h_addrtype AF_INET Il contient la famille d'adresses et dans le cas d'une application basée sur Internet, ce sera toujours AF_INET.
h_length 4 Il contient la longueur de l'adresse IP, qui est de 4 pour l'adresse Internet.
h_addr_list in_addr Pour les adresses Internet, le tableau de pointeurs h_addr_list [0], h_addr_list [1], etc., sont des points vers la structure in_addr.

NOTE - h_addr est défini comme h_addr_list [0] pour conserver la compatibilité descendante.

servent

Cette structure particulière est utilisée pour conserver les informations relatives au service et aux ports associés.

struct servent {
   char  *s_name; 
   char  **s_aliases; 
   int   s_port;  
   char  *s_proto;
};

Voici la description des champs membres -

Attribut Valeurs La description
Le nom de http C'est le nom officiel du service. Par exemple, SMTP, FTP POP3, etc.
s_aliases ALIAS Il contient la liste des alias de service. La plupart du temps, ce paramètre sera défini sur NULL.
sport 80 Il aura un numéro de port associé. Par exemple, pour HTTP, ce sera 80.
s_proto

TCP

UDP

Il est défini sur le protocole utilisé. Les services Internet sont fournis en utilisant TCP ou UDP.

Conseils sur les structures de socket

Les structures d'adresse de socket font partie intégrante de chaque programme réseau. Nous les allouons, les remplissons et leur passons des pointeurs vers diverses fonctions de socket. Parfois, nous passons un pointeur vers l'une de ces structures à une fonction socket et il remplit le contenu.

Nous passons toujours ces structures par référence (c'est-à-dire que nous passons un pointeur vers la structure, pas la structure elle-même), et nous passons toujours la taille de la structure comme un autre argument.

Lorsqu'une fonction socket remplit une structure, la longueur est également passée par référence, afin que sa valeur puisse être mise à jour par la fonction. Nous appelons ces arguments valeur-résultat.

Toujours, définissez les variables de structure sur NULL (c'est-à-dire, '\ 0') en utilisant memset () pour les fonctions bzero (), sinon il peut obtenir des valeurs indésirables inattendues dans votre structure.