bind ()
Après création une socket n’est connue que du processus qui l’a créé. Il faut lui associer une adresse locale. Le point de communication sera complètement défini lorsque la socket sera associé à une adresse IP et un numéro de port. L'attachement d'une adresse à une socket se fait grâce à l'appel de la fonction bind().
a) Syntaxe :
b)Valeur retournée :
retourne 0 en cas de succès, et -1 en cas d’erreur.
c) Paramètres d’entrée :
1. s :descripteur de socket retourné par l’appel socket.
2. my_addr :est un pointeur sur une adresse locale (@ip)
3. addrlen : longueur d’@.
La
structure sockaddr:
La structure sockaddr est générique
#include <sys/socket.h>
struct sockaddr {
u_short sa_family; /* famille */
char sa_data[14]; /* jusqu'à 14 octets d'adresse directe : Le contenu des 14 bytes doit être interprété suivant le type d'adresse. */
};
Des structures d'adresses sont redéfinies pour chaque famille d'adresses (AF_INET ou AF_UNIX)
a. AF_UNIX :
L’@ de socket est un chemin situé la socket dans l’arborescence des fichiers
#include <sys/un.h>
struct sockaddr_un
{
short sun_family ;
char sun_path[100] ;
} ;
sun_family : AF_UNIX//AF_LOCAL
sun_path :chemin
b. AF_INET
#include <netinet/in.h>
struct sockaddr_in
{
short sin_family; // address family: AF_INET
short sin_port; // Port
struct in_addr sin_addr; // Internet address
char sin_zero[8] ; // inutilisé (Mise à zéro)
};
struct in_addr
{
long s_addr; // address in network byte order
};
3eme champs:
· Si serveur sin_addr.s_addr=INADDR_ANY Affecter à toutes les interfaces locales. Dans le cas d’un processus serveur, la machine doit être accessible sur tous les réseaux auxquels elle est directement reliée (cas de plusieurs interfaces physique). La socket est définie pour l’ensemble des adresse ip de la machine serveur.
· Si client on utilise la function gethostname().