0% ont trouvé ce document utile (0 vote)
36 vues6 pages

Echanges D

Le document décrit les appels système utilisés pour l'émission et la réception d'informations sur un socket, en distinguant les modes connectés et non connectés. Il présente les fonctions send, sendto, recv, et recvfrom, ainsi que leurs arguments et options, notamment les flags pour le contrôle de la transmission. Une structure est également définie pour simplifier l'utilisation des appels sendmsg et recvmsg.

Transféré par

lamiazid8
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
36 vues6 pages

Echanges D

Le document décrit les appels système utilisés pour l'émission et la réception d'informations sur un socket, en distinguant les modes connectés et non connectés. Il présente les fonctions send, sendto, recv, et recvfrom, ainsi que leurs arguments et options, notamment les flags pour le contrôle de la transmission. Une structure est également définie pour simplifier l'utilisation des appels sendmsg et recvmsg.

Transféré par

lamiazid8
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

ECHANGES D’INFORMATIONS SUR UN SOCKET

1- Emission d’information

Une fois que le programme d’application dispose d’un socket, il peut l’utiliser afin de transférer des données.
Cinq appels système sont utilisables : send, sendto, sendmsg, write et writev. Send, write et writev ne sont
utilisables qu’avec des sockets en mode connect. car ils ne permettent pas d’indiquer d’adresse de destination.
Les différences entre ces trois appels sont mineures :

#include <sys/types.h>

#include <sys/socket.h>

write ( int sockfd, char *buff, int nbytes ) ;

writev ( int sockfd, iovec *vect_E/S, int lgr_vect_E/S ) ;

int send (int sockfd, char *buff, int nbytes, int flags ) ;

- socket contient le descripteur de socket .

- buff est un pointeur sur un tampon ou sont stockées les données a envoyer.

- nbytes est le nombre d’octets ou de caractères que l’on désire envoyer

- vect_E/S est un pointeur vers un tableau de pointeurs sur des blocs qui constituent le message à envoyer.

- flags drapeau de contrôle de la transmission.

Pour le mode non connecté :On a deux appels sendto et sendmsg qui imposent d’indiquer l’adresse de
destination :

#include <sys/types.h>

#include <sys/socket.h>

int sendto (int sockfd, char *buff, int nbytes, int flags, struct sockaddr *to, int addrlen) ;

Les quatre premiers arguments sont les mêmes que pour send, les deux derniers sont l’adresse de destination et
la taille de cette adresse.

Pour les cas où on utiliserait fréquemment l’appel sendto qui nécessite beaucoup d’arguments et qui serait donc
d’une utilisation trop lourde on définit la structure suivante:

struct struct_mesg.{

int *sockaddr ;

int sockaddr_len ;

iovec *vecteur_E/S

int vecteur_E/S_len

int *droit_dÕacces

int droit_dÕacces_len

}
Cette structure sera utilisée par l’appel sendmsg :

int sendmsg ( int sockfd, struct struct_mesg, int flags ) ;

2 – Réception d’information

On distingue 5 appels système de réception d’information qui sont symétriques au appels d’envoi. Pour le mode
connecté. on a les appelles read, readv et recv et pour le mode sans connexion on a les appelles recvfrom et
recvmsg.

int read ( int sockfd, char *buff, int nbytes ) ;

int readv ( int sockfd, iovec *vect_E/S, int lgr_vect_E/S ) ;

int recv (int sockfd, char *buff, int nbytes, int flags ) ;

- sockfd est le descripteur sur lequel les données seront lues .

- buff est un pointeur sur un buffer où seront stockées les [Link] lues

-nbytes est le nombre maximal d’octets ou de caractères qui seront lus.

- readv permet de mettre les [Link] lues dans des cases mémoire non contiguës.

Ces cases mémoires sont pointees par un tableau de pointeurs qui lui-même est point par vect_E/S.

lgr_vect_E/S est la longueur de ce tableau.

Pour le mode sans connexion, il faut préciser les adresses des correspondants desquels on

attend des données.

int recvfrom (int sockfd, char *buff, int nbytes, int flags, struct sockaddr *from, int addrlen) ;

Pour les mêmes raisons que pour sendto et sendmsg, et pour des raison de symétrie on a définie l’appel recvmsg
qui utilise la même structure que sendmsg.

int recvmsg ( int sockfd, struct struct_mesg, int flags ) ;

DETAIL DES ARGUMENTS FLAGS

Les arguments flags sont soit zéro soit le résultat d’un or entre les trois constantes suivantes :

MSG_OOB émission ou réception de [Link] hors bande

MSG_PEEK Cout d'œil au message entrant (recv ou recvfrom)

MSG_DONTROUTE dérivation du routage (send ou sendto)

MSG_PEEK le drapeau permet à l'appelant de regarder les données qui sont disponibles pour la lecture, sans
que le système ignore les données après le retour de la recv ou recvfrom

MSG_OOB : les données hors bande sont des données urgentes.

Les données hors bande sont des transmissions indépendantes entre une paire de sockets connectés. Les
données hors bande sont délivrées indépendamment des données normales.
Pour les protocoles de communication qui ne supportent pas les données hors bande, les messages urgents sont
extraits du flux de [Link] et stockés séparément. Ceci laisse le choix à l’utilisateur entre recevoir les données
urgentes dans l’ordre ou pas, sans avoir à les stocker dans un buffer.

Si un socket possède un process-group, un signal SIGURG est généré quand le protocole prend connaissance de
l’arrivé d’une donnée hors bande. Le process _group ou le process _id qui devra très informér de l’arrivé d’une
donnée urgente peut être initialise par la fonction Cette structure sera utilisée par l’appel sendmsg :

int sendmsg ( int sockfd, struct struct_mesg, int flags ) ;

5.2 – Réception d’information :

On distingue 5 appels système de réception d’information qui sont symétriques au appels d’envoi. Pour le mode
connecté. on a les appelles read, readv et recv et pour le mode sans connexion on a les appelles recvfrom et
recvmsg.

int read ( int sockfd, char *buff, int nbytes ) ;

int readv ( int sockfd, iovec *vect_E/S, int lgr_vect_E/S ) ;

int recv (int sockfd, char *buff, int nbytes, int flags ) ;

- sockfd est le descripteur sur lequel les données seront lues.

- buff est un pointeur sur un buffer où seront stockées les données lues

- nbytes est le nombre maximal d’octets ou de caractères qui seront lus.

- readv permet de mettre les [Link] lues dans des cases mémoire non contiguës.

Ces cases mémoires sont pointées par un tableau de pointeurs qui lui-même est point par vect_E/S.

lgr_vect_E/S est la longueur de ce tableau.

Pour le mode sans connexion, il faut préciser les adresses des correspondants desquels on attend des données.

int recvfrom (int sockfd, char *buff, int nbytes, int flags, struct sockaddr *from, int addrlen) ;

Pour les mêmes raisons que pour sendto et sendmsg, et pour des raisons de symétrie on a définie l’appel
recvmsg qui utilise la même structure que sendmsg

int recvmsg ( int sockfd, struct struct_mesg, int flags ) ;

DETAIL DES ARGUMENTS FLAGS

Les arguments flags sont soit zéro soit le résultat d’un or entre les trois constantes suivantes :

MSG_OOB émission ou réception de [Link] hors bande

MSG_PEEK Cout d'œil au message entrant (recv ou recvfrom)

MSG_DONTROUTE dérivation du routage (send ou sendto)

MSG_PEEK le drapeau permet à l'appelant de regarder les données qui sont disponibles pour la lecture, sans
que le système ignore les données après le retour de la recv ou recvfrom

MSG_OOB : les données hors bande sont des données urgentes.


Les données hors bande sont des transmissions indépendantes entre une paire de socket connectés. Les données
hors bande sont délivrées indépendamment des données normales.

Pour les protocoles de communication qui ne supportent pas les données hors bande, les messages urgents sont
extraits du flux de [Link] et stockés séparément. Ceci laisse le choix à l’utilisateur entre recevoir les données
urgentes dans l’ordre ou pas, sans avoir à les stocker dans un buffer.

Si un socket possède un process-group, un signal SIGURG est généré quand le protocole prend connaissance de
l’arrivé d’une donnée hors bande. Le process-group ou le process-id qui devra très informé. de l’arrivé d’une
donnée urgente peut être initialisé. par la fonction fcntl().

si plusieurs sockets sont susceptibles de recevoir des donnees hors bande, l’appel de la fonction select() permet
de sélectionner le socket devant recevoir la donnée urgente. Pour envoyer des données hors bande, l’option
MSG_OOB doit très utilisé lors de l’appel de send() ou sendto().
Fiche technique N°=
Spécialité : système numérique option réseau informatique S4 Date : 27 /04 /2025

Module : programmation sous réseaux N°séance : 02

Enseignante : Mme Bouaita Durée : 2h

Thème : ECHANGES D’INFORMATIONS SUR UN SOCKET

Objectif Opérationnel
A la fin de la séance le stagiaire sera capable de connaitre les différentes fonctions
d’appel système relative a l’échange d’information sur un socket en se basant sur les
explications du professeur et sans faute.

 Plan du cours :
1. Emission de l’information
2. Réception de l’information

Outils et matériels de travail :

Enseignant Stagiaire
- Tableau blanc (magique)
- Marqueurs - Cahiers
- Fiche de la séance - stylos

 Aides pédagogique :

- Neant

 Bibliographie :
- Sites web : [Link]
ile:///C:/Users/user/Downloads/[Link]

Vous aimerez peut-être aussi