réseaux sockets - loriaaf_inet + sock_dgram! ipproto_udp mettre : protocol = 0 e. jeandel, lif...
TRANSCRIPT
![Page 1: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/1.jpg)
RéseauxSockets
E. Jeandel
Emmanuel.Jeandel at lif.univ-mrs.fr
E. Jeandel, Lif RéseauxSockets 1/35
![Page 2: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/2.jpg)
Contenu
1 Généralités
2 Sockets BSD
3 Usage élaboré
E. Jeandel, Lif RéseauxSockets 2/35
![Page 3: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/3.jpg)
Sockets
Une des extrêmités d’une communication sur internetUne socket est donnée par :
L’adresse de transport locale (IP + port)L’adresse de transport du destinataire (eventuellement)Le protocole de transport (TCP, UDP, . . .)
Une socket connectée est déterminée par quatre informations :Adresse réseau/port source et Adresse réseau/port destination
E. Jeandel, Lif RéseauxSockets 3/35
![Page 4: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/4.jpg)
SocketsTypes
Plusieurs types. Les plus fréquents :Socket stream (connectée, TCP sur Internet)Socket datagramme (non connectée, non fiable, UDP sur internet)Socket Raw : niveau couche réseau
Sockets Raw accessibles en général uniquement par root.
Conséquence :ejeandel@monster:home/> ls -l /bin/ping
-rwsr-xr-x 1 root root 33576 août 28 2009 /bin/ping
E. Jeandel, Lif RéseauxSockets 4/35
![Page 5: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/5.jpg)
SocketsAPI
Plusieurs API :BSD sockets (Standard sur MAC OS X, Linux)Windows SocketsTLI (Transport Layer Interface)/XTI (Standard sur MAC OS,Solaris. . . )
Normalisé dans POSIX.
E. Jeandel, Lif RéseauxSockets 5/35
![Page 6: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/6.jpg)
Contenu
1 Généralités
2 Sockets BSD
3 Usage élaboré
E. Jeandel, Lif RéseauxSockets 6/35
![Page 7: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/7.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 7/35
![Page 8: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/8.jpg)
Création
Pour créer une socket, il faut savoir :La famille de protocolesLe type (voir plus haut)Le protocole
int socket(int domain, int type, int protocol);
Le résultat est un descripteur de fichiersOn peut utiliser write, read, dup2 sur le résultat
E. Jeandel, Lif RéseauxSockets 8/35
![Page 9: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/9.jpg)
Famille de protocoles
#define AF_UNSPEC 0#define AF_UNIX 1 /* Unix domain sockets */#define AF_LOCAL 1 /* POSIX name for AF_UNIX */#define AF_INET 2 /* Internet IP Protocol */#define AF_AX25 3 /* Amateur Radio AX.25 */#define AF_IPX 4 /* Novell IPX */#define AF_APPLETALK 5 /* AppleTalk DDP */#define AF_NETROM 6 /* Amateur Radio NET/ROM */#define AF_BRIDGE 7 /* Multiprotocol bridge */#define AF_ATMPVC 8 /* ATM PVCs */#define AF_X25 9 /* Reserved for X.25 project */#define AF_INET6 10 /* IP version 6 */#define AF_ROSE 11 /* Amateur Radio X.25 PLP */#define AF_DECnet 12 /* Reserved for DECnet project */#define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/#define AF_SECURITY 14 /* Security callback pseudo AF */#define AF_KEY 15 /* PF_KEY key management API */...
(Source : Noyau Linux)E. Jeandel, Lif RéseauxSockets 9/35
![Page 10: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/10.jpg)
Types et Protocoles
#define SOCK_STREAM 1 /* stream socket */#define SOCK_DGRAM 2 /* datagram socket */#define SOCK_RAW 3 /* raw-protocol interface */
#define IPPROTO_ICMP 1 /* control message protocol */#define IPPROTO_IPV4 4 /* IPv4 encapsulation */#define IPPROTO_TCP 6 /* tcp */...#define IPPROTO_UDP 17 /* user datagram protocol */#define IPPROTO_RAW 255 /* raw IP packet */
(Source : Noyau XNU)Souvent, famille + type suffit à identifier le protocoleAF_INET + SOCK_STREAM → IPPROTO_TCP
AF_INET + SOCK_DGRAM → IPPROTO_UDP
Mettre : protocol = 0
E. Jeandel, Lif RéseauxSockets 10/35
![Page 11: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/11.jpg)
Fonctions de conversion
Le codage des entiers sur le réseau doit être défini de façoncohérentenetwork byte orderGrand boutiste
Fonctions pour convertir
uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);
E. Jeandel, Lif RéseauxSockets 11/35
![Page 12: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/12.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 12/35
![Page 13: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/13.jpg)
Fin
int shutdown(int sockfd, int how);
how = SHUT_{RD,WR,RDWR}, désactive réception, envoie, ou lesdeux.SHUT_WR envoie un paquet FINEnsuite on peut faire close
On peut aussi faire close directement.Différence sur le traitement des messages dans les tampons
E. Jeandel, Lif RéseauxSockets 13/35
![Page 14: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/14.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 14/35
![Page 15: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/15.jpg)
sockaddr
Une adresse est stockée dans une structure sockaddr
Dépend de l’implémentationContient un champ sa_family
Pour chaque sa_family différent, une sous-structure :struct sockaddr_in (AF_INET)
struct sockaddr_in6 (AF_INET6)
struct sockaddr_un (AF_UNIX)
Structure générique struct sockaddr_storage de taille plusgrande que toutes les autres.La façon d’aller chercher l’adresse et le port diffèrent suivant lafamille. . .On peut tout de même les rentrer à la main. . .
E. Jeandel, Lif RéseauxSockets 15/35
![Page 16: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/16.jpg)
Entrer les adresses
L’utilisateur préfère avoir les adresses de façon “claire” (chaine decaractères) plutôt que binaireFonctions de conversionIPV4 : inet_ntoa, inet_aton (déprécié)
char *inet_ntop(int af, void *src, char *dst, socklen_t size);int inet_pton(int af, const char *src, void *dst);
af : Address family (AF_INET, AF_INET6)Pénible à utiliser en pratique
E. Jeandel, Lif RéseauxSockets 16/35
![Page 17: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/17.jpg)
Solution propre
getaddrinfo
S’occupe également de la résolution des adresses/portsRemplace aussi getservbyname, gethostbyname
int getaddrinfo(char *node, char *service,struct addrinfo *hints, struct addrinfo **res);
hints : Paramètres voulus pour la socketai_{family,socktype,protocol} ainsi que ai_flags
Résultat : liste des possibilités :ai_{family,socktype,protocol,sockaddr}
ai_next pour passer à la suivante.Libéré avec freeaddrinfo.
E. Jeandel, Lif RéseauxSockets 17/35
![Page 18: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/18.jpg)
Réciproque
Retrouver adresse et port à partir de sockaddr
getnameinfo
Remplace gethostbyaddr, getservbyport
int getnameinfo(struct sockaddr *sa, socklen_t salen,char *host, size_t hostlen,char *serv, size_t servlen, int flags);
E. Jeandel, Lif RéseauxSockets 18/35
![Page 19: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/19.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 19/35
![Page 20: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/20.jpg)
Ecriture
ssize_t send(int sockfd, void *buf, size_t len, int flags);ssize_t sendto(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *dest_addr, socklen_t addrlen);
sendto utilisé pour UDP.Si le destinataire est connu (eg TCP), on peut aussi utiliser write
E. Jeandel, Lif RéseauxSockets 20/35
![Page 21: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/21.jpg)
Lecture
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
On peut également utiliser recv (et même read) sur une socketUDP.
E. Jeandel, Lif RéseauxSockets 21/35
![Page 22: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/22.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 22/35
![Page 23: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/23.jpg)
TCP
Client :
int connect(int sockfd, struct sockaddr *addr, socklen_t addrlen);
Serveur :
int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen);int listen(int sockfd, int backlog);int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
bind : Donne une adresse locale à la socketlisten : La socket est passive et attend les connexions.accept : Attend une connexion, puis crée une nouvelle socketpermettant de traiter la connexion
Note : Pour le serveur, il faut ajouter le flag AI_PASSIVE lors degetaddrinfo
On peut également faire bind chez le client (sémantique ?)
E. Jeandel, Lif RéseauxSockets 23/35
![Page 24: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/24.jpg)
UDP
int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen);
bind : Donne une adresse locale à la socket (permet ensuited’utiliser recvfrom)On peut utiliser connect(fd,addr,addrlen)
Seuls les paquets émis depuis addr seront reçus.Les paquets sont envoyés par défaut (avec send) à addr
Pas vraiment de client ni de serveur..
E. Jeandel, Lif RéseauxSockets 24/35
![Page 25: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/25.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 25/35
![Page 26: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/26.jpg)
Différences
Tout ce qu’on a déjà dit les semaines précédentes..
E. Jeandel, Lif RéseauxSockets 26/35
![Page 27: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/27.jpg)
UDP vs TCP
UDP : A chaque appel de send, un paquet va être envoyéUDP : recv reçoit un paquet en entierSi A appelle send deux fois sur un buffers d’un bit, et B fait un seulrecv :
TCP : B recevra les deux bits.UDP : B recevra le premier bit, doit faire un second recv pour ledeuxième
UDP : Si le buffer de recv est trop petit, le reste du paquet estperdu.
E. Jeandel, Lif RéseauxSockets 27/35
![Page 28: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/28.jpg)
UDP vs TCP
UDP n’a pas de tampon pour les paquets envoyés.Pour un envoi de plusieurs paquets rapidement sur un réseaulocal, les premiers vont être supprimés
Temps que le cache ARP se mette à jour
E. Jeandel, Lif RéseauxSockets 28/35
![Page 29: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/29.jpg)
Contenu
1 Généralités
2 Sockets BSD
3 Usage élaboré
E. Jeandel, Lif RéseauxSockets 29/35
![Page 30: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/30.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 30/35
![Page 31: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/31.jpg)
Options des sockets
int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
level = SOL_SOCKET, IPPROTO_IP, IPROTO_TCP, etcOptions utiles :
SO_REUSEADDR. Permet de faire bind sur une adresse déjà utilisée.IP_TTL. Change le TTL des prochains paquets envoyés.TCP_NODELAY. Désactive l’algorithme de Nagle.
D’autres options spécifiques à l’OS (TCP_MAXSEG, TCP_QUICKACK..)
E. Jeandel, Lif RéseauxSockets 31/35
![Page 32: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/32.jpg)
OOB (Out of Band)
Permet d’envoyer des données sur un deuxième “canal” en mêmetemps que le premierTCP : canal limité à 1 bit à la fois.Option MSG_OOB de send/recv
E. Jeandel, Lif RéseauxSockets 32/35
![Page 33: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/33.jpg)
Contenu
1 Généralités
2 Sockets BSDCréationDestructionAdressesI/OClient/ServeurUDP/TCP
3 Usage élaboréDiversAppels non bloquants
E. Jeandel, Lif RéseauxSockets 33/35
![Page 34: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/34.jpg)
Problématique
Faire des appels non bloquants, par exemple pour traiter plusieursconnexion simultanément
E. Jeandel, Lif RéseauxSockets 34/35
![Page 35: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/35.jpg)
Solution 1
Rendre la socket non bloquante
POSIX :
flags = fcntl(socket,F_GETFL,0);fcntl(socket, F_SETFL, flags | O_NONBLOCK);
Autres :
flags = 1;ioctl(socket, FIONBIO, &flags);
E. Jeandel, Lif RéseauxSockets 35/35
![Page 36: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/36.jpg)
Solution 2select
int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);
Un évènement de lecture est enclenché :S’il y a quelque chose à lire
Sur une socket passive, si un nouveau client s’est connecté
Si la socket est fermée
Un évènement d’écriture est enclenché :Si on peut écrire (le tampon est vide)
Si la socket est fermée
Si un connect (non bloquant) est fini
Un évènement exceptionnel se produitLorsqu’on reçoit un paquet OOB.
E. Jeandel, Lif RéseauxSockets 36/35
![Page 37: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/37.jpg)
Contenu
1 Généralités
2 Sockets BSD
3 Usage élaboré
E. Jeandel, Lif RéseauxSockets 37/35
![Page 38: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/38.jpg)
Windows Sockets
Essentiellement la même chose que les sockets BSDDifférence principale : Le numéro de la socket n’est pas undescripteur de fichierOn ne peut donc pas utiliser read, write,close.
E. Jeandel, Lif RéseauxSockets 38/35
![Page 39: Réseaux Sockets - LORIAAF_INET + SOCK_DGRAM! IPPROTO_UDP Mettre : protocol = 0 E. Jeandel, Lif RéseauxSockets 10/35 Fonctions de conversion Le codage des entiers sur le réseau doit](https://reader034.vdocuments.net/reader034/viewer/2022042115/5e92da847807564cb67d235e/html5/thumbnails/39.jpg)
API
Différences dans l’API :
close vs closesocket
ioctl vs ioctlsocket
Appel initial/final de toute application à WSAStartup/WSACleanup
Grosses différences dans la gestion des erreurs.
E. Jeandel, Lif RéseauxSockets 39/35