L'objectif de ce TP est de se passer de la bibliothèque client_serveur
qui avait été utilisée jusque-là, et d'apprendre à utiliser directement les fonctions système. Quelques exercices sont proposés après un résumé des fonctions à utiliser.
Sous Unix, les communications se font à l'aide d'un objet que l'on nomme « socket ».
Celles-ci sont créées par la fonction socket(2)
:
int socket(int domaine, int type, int protocole);
où les paramètres domaine
et type
définissent le type de socket souhaité. Par exemple, pour des communications en TCP/IP, il faut utiliser le domaine AF_INET
(pour IPv4) et le type SOCK_STREAM
(pour TCP). Le paramètre protocole
prend la valeur 0
.
Cette fonction retourne un descripteur de fichier pour la socket nouvellement créée, ou -1
en cas d'erreur.
Une fois que la socket est créée, il est possible de la connecter grâce à la fonction :
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
où les paramètres sont :
sockfd
est la socket à connecter,addr
est l'adresse à laquelle se connecter,addrlen
est la taille de la structure pointée par addr
.Les adresses IP sont codées dans une structure de type sockaddr_in
:
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
où :
sin_family
prend la valeur AF_INET
,