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.