Les fonctions des sockets en détail

 

 

La fonction socket()

La création d'un socket se fait grâce à la fonction socket():

  
int socket(famille,type,protocole)

La fonction socket() renvoie un entier qui correspond à un descripteur du socket nouvellement créé et qui sera passé en paramètre aux fonctions suivantes. En cas d'erreur, la fonction socket() retourne -1.

Voici un exemple d'utilisation de la fonction socket() :

  
descripteur = socket(PF_INET,SOCK_STREAM,0);

 

La fonction bind()

 

Après création du socket, il s'aget de le lier à un point de communication défini par une adresse et un port, c'est le rôle de la fonction bind():

  
socket(int descripteur,sockaddr localaddr,int addrlen)

Voici un exemple d'utilisation de la fonction bind() :

  
sockaddr_in localaddr ; 
localaddr.sin_family = AF_INET; /* Protocole internet */
localaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Toutes les adresses IP de la station */
localaddr.sin_port = htons(port); /* port d'écoute par défaut au dessus des ports réservés */

if (bind(listen_socket,(struct sockaddr*)&localaddr,sizeof(localaddr) ) == SOCKET_ERROR) { 

// Traitement de l'erreur; 

}

Le numéro fictif INADDR_ANY signifie que la socket peut-être associée à n'importe quelle adresse IP de la machine locale (s'il en existe plusieurs). Pour spécifier une adresse IP spécifique à utiliser, il est possible d'utiliser la fonction inet_addr()

  
inet_addr("127.0.0.1");
/* utilisation de l'adresse de boucle locale */

La socket peut être reliée à un port libre quelconque en utilisant le numéro 0

 

La fonction listen()

La fonction listen() permet de mettre une socket en attente de connexion.

 

Attention: La fonction listen() ne s'utilise qu'en mode connecté (donc avec le protocole TCP)
  
int send(int socket,int backlog)

La fonction listen() retourne la valeur SOCKET_ERROR en cas de problème, sinon elle retourne 0.

Voici un exemple d'utilisation de la fonction listen() :

  
if (listen(socket,10) == SOCKET_ERROR) { 
// traitement de l'erreur
}

 

La fonction accept()

La fonction accept() permet la connexion en acceptant un appel :

  
int accept(int socket,struct sockaddr * addr,int * addrlen)

La fonction accept() retourne un identificateur du socket de réponse. Si une erreur intervient la fonction accept() retourne la valeur INVALID_SOCKET.

Voici un exemple d'utilisation de la fonction listen() :

  
Sockaddr_in Appelant; 
/* structure destinee a recueillir les renseignements sur l'appelant
Appelantlen = sizeof(from);
accept(socket_locale,(struct sockaddr*)&Appelant, &Appelantlen);

 

La fonction connect()

La fonction connect() permet d'établir une connexion avec un serveur :

  
int connect(int socket,struct sockaddr * addr,int * addrlen)

La fonction connect() retourne 0 si la connexion s'est bien déroulée, sinon -1.

Voici un exemple d'utilisation de la fonction connect(), qui connecte le socket "s" du client sur le port port de l'hôte portant le nom serveur :

  
toinfo = gethostbyname(serveur); 
toaddr = (u_long *)toinfo.h_addr_list[0];

to.sin_family = AF_INET; /* Protocole internet */
to.sin_addr.s_addr = toaddr; /* Toutes les adresses IP de la station */
to.sin_port = htonl(port); /* port d'écoute par défaut au dessus des ports réservés */

if (connect(socket,(struct sockaddr*)to,sizeof(to)) == -1) { 
// Traitement de l'erreur; 
}

 

La fonction recv()

La fonction recv() permet de lire dans un socket en mode non connecté (UDP)

  
int recv(int socket,char * buffer,int len,int flags)

La fonction recv() renvoie le nombre d'octets lus. De plus cette fonction bloque le processus jusqu'à ce qu'elle reçoive des données

Voici un exemple d'utilisation de la fonction recv() :

  
retour = recv(socket,Buffer,sizeof(Buffer),0 ); 

if (retour == SOCKET_ERROR) { 
// traitement de l'erreur
}

 

La fonction send()

La fonction send() permet d'écrire dans un socket (envoyer des données) en mode non connecté (UDP)

  
int send(int socket,char * buffer,int len,int flags)

La fonction send() renvoie le nombre d'octets effecivement envoyés.

Voici un exemple d'utilisation de la fonction send() :

  
retour = send(socket,Buffer,sizeof(Buffer),0 ); 

if (retour == SOCKET_ERROR) { 
// traitement de l'erreur
}

 

Les fonctions close() et shutdown()

La fonction close() permet la fermeture d'un socket en permettant au système d'envoyer les données restantes (pour TCP) :

  
int close(int socket)

La fonction shutdown() permet la fermeture d'un socket dans un des deux sens (pour une connection full-duplex) :

  
int shutdown(int socket,int how)

close() comme shutdown() retournent -1 en cas d'erreur, 0 si la fermeture se déroule bien.


 

 

 

 











Ajouter aux Favoris Ajouter aux votre page
 

 





Autoformations les cours informatiques en vidéos gratuitement
:: Copyright © 2008 http://www.autoformations.co.cc All rights reserved ::