Utilisation des fonctions système

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.

Résumé des fonctions

Socket

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.

Le client

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 :

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ù :