Академический Документы
Профессиональный Документы
Культура Документы
COURS URECCNRSFR
● "ERNARD 4UY *EAN
0AUL 'AUTIER
0LAN
3OCKET
3OCKET MODE CONNECT¨
APPELS SYT§MES
SERVEUR
CLIENT
socket
bind
accept socket
Etablissement de la connexion
connect
Réponse
write read
Fermeture
close close
3OCKET MODE DATAGRAMME
APPELS SYT§MES
SERVEUR
CLIENT
socket socket
bind (bind)
Réponse
sendto recvfrom
3OCKET PRIMITIVES 5NIX
● $©FINITION DUNE SOCKET
» Création S SOCKET DOMAINE TYPE PROTOCOLE
● domaine
» PF_UNIX : locale au système, nom de fichier dans l'arborescence
» PF_INET : accès au réseau en utilisant le protocole IP
» PF_ROUTE : passage de paramètres au noyau (tables de routages, table
ARTP)
● type
» SOCK_STREAM : protocoles de type mode connecté (TCP)
» SOCK_DGRAM : protocoles de type mode datagramme (UDP)
» SOCK_RAW : utilisation directe des protocoles de bas niveau 3 (IP,
ICMP)
● protocole : identification du protocole utilisé. Si 0, le système déduit ce champ des
2 paramètres précédents.
3OCKET PRIMITIVES 5NIX
» Adressage
STRUCT SOCKADDR [
U?CHAR SA?LEN
LONGUEUR TOTALE
U?CHAR SA?FAMILY
FAMILLE DADRESSE
CHAR SA?DATA ;=
VALEURS
]
● dans le fichier source <sys/socket.h>
STRUCT SOCKADDR [
U?INT?T SIN?LEN
LONGUEUR TOTALE
U?INT?T SIN?FAMILY
FAMILLE DADRESSE
U?INT?T SIN?PORT
STRUCT IN?ADDR SIN?ADDR
INT?T SIN?ZERO;=
]
● dans le fichier source netinet/in.h
3OCKET PRIMITIVES 5NIX
» Lien entre la socket et le protocole
ERROR BIND S ADR ADRLONG
● error : entier qui contient le compte-rendu de l’instruction
» 0 : opération correctement déroulée
» -1 : une erreur est survenue
● s descripteur de la socket
● adr pointeur vers la zone contenent l’adresse de la station
● adrlong logueur de la zone adr
» Ouverture d’une connexion
ERROR CONNECT S DESTADDR ADRLONG
● mêmes paramètres que pour bind, la structure destadr contient l'adresse
de la machine distante ainsi que le numéro de port à atteindre
3OCKET PRIMITIVES 5NIX
» Primitives du serveur
LISTEN S BACKLOG
● permet de créer une file d'attente pour recevoir les demandes de
connexion qui n'ont pas encore été prises en compte.
» s descripteur de la socket
» backlog nombre de requêtes maximum autorisées.
3OCKET PRIMITIVES 5NIX
● !DRESSES LOCALES ET DISTANTES DUNE SOCKET
getsockname ( s, localadr, addrlen )
● permet de connaître l'adresse locale d'une socket (celle du bind).
● utile pour connaître le numéro de port attribué dynamiquement par le
système.
3OCKET PRIMITIVES 5NIX
● 2©CEPTION DE DONN©ES
cc = read (s , buffer, taillemax )
● buffer est un pointeur vers la zone de réception.
● cc : nombre d'octets réellement reçus.
3OCKET PRIMITIVES 5NIX
3OCKET PRIMITIVES 5NIX
● !CC¨S AUX BASES DE DONN©ES RELATIVES AUX SITES
struct hostent * gethostbyname ( name )
● interrogation sur /etc/hosts, NIS, DNS
● la structure est définie dans netdb.h
struct hostent * gethostbyaddr ( addr, len, type )
gethostname ( name , namelen)
● permet de connaître le nom de la machine locale sur laquelle s'éxécute le
programme.
getnetbyname ( name ), getnetbyaddr (netaddr, addrtype)
● le réseau sur lequel on travaille
getprotobyname ( name ), getprotobynumber (number)
● le protocole utilisé
getservbyname ( name , proto), getservbyport ( port, proto)
● le service utilisé
3OCKET EXEMPLE
● Programme permettant de savoir si un utilisateur est connu sur une station.
serveur client
réponse
3OCKETS EXEMPLE CLIENT
INCLUDE STDIOH
INCLUDE SYSTYPESH
INCLUDE SYSSOCKETH
INCLUDE NETINETINH
INCLUDE NETDBH
DEFINE "5&3):%
DEFINE ./2-!,
ARGV
[
INT S
INT LEN
STRUCT SOCKADDR?IN SA STUCTURE ADRESSE )NTERNET
STRUCT HOSTENT
HP STRUCTURE SERVICE DE NOM
STRUCT SERVENT
SP STRUCTURE SERVICE )NTERNET
3OCKET EXEMPLE CLIENT
CHAR
MYNAME pointeur sur le nom du programme
CHAR BUF;"5&3):%=
CHAR
HOST
USER pointeurs sur le serveur et l’utilisateur
3OCKET EXEMPLE CLIENT
COPIE DE LADRESSE DU
BCOPY CHAR
HP
H?ADDRCHAR
SASIN?ADDRHP
H?LENGTH SERVEUR ET DU TYPE
SASIN?FAMILY HP
H?ADDRTYPE DADRESSE DANS SA
3OCKET EXEMPLE CLIENT
IF CONNECT SSASIZEOFSA [ CONNEXION AU SERVEUR INFOS DANS LA
PERROR CONNECT STRUCTURE ADRESSE )NTERNET
EXIT
]
SEND S USER STRLENUSER ./2-!, ENVOI DE LA REQUªTE
3OCKETS EXEMPLE SERVEUR
INCLUDE STDIOH
INCLUDE SYSTYPESH
INCLUDE SYSSOCKETH
INCLUDE NETINETINH
INCLUDE NETDBH
INCLUDE PWDH
DEFINE "5&3):%
DEFINE ./2-!,
DEFINE "!#+,/' TAILLE DE LA FILE DATTENTE INITIALIS©E PAR LISTEN
DEFINE -!8(/34.!-%
DEFINE -!82%1 NOMBRE DE REQUªTES TRAIT©ES PAR CE PROGRAMME IL
SARRªTE D¨S QUE LA LIMITE EST ATTEINTE
MAIN ARGCARGV
INT ARGC
CHAR
ARGV
VOID QUIEST
3OCKET EXEMPLE SERVEUR
INT S T DESCRIPTEUR DE SOCKET
INT ICOUNT?REQ
STRUCT SOCKADDR?IN SA STUCTURE ADRESSE )NTERNET
STRUCT SOCKADDR?IN ISA
STRUCT HOSTENT
HP STRUCTURE SERVICE DE NOM
STRUCT SERVENT
SP STRUCTURE SERVICE )NTERNET
CHAR LOCALHOST;-!8(/34.!-%=
3OCKET EXEMPLE SERVEUR
GETHOSTNAME LOCALHOST -!8(/34.!-% INFOS SUR LE SERVEUR DANS LA
STRUCTURE HP
HP GETHOSTBYNAME LOCALHOST
REMPLI LA STRUCTURE ADRESSE SA
BCOPYHP
H?ADDRCHAR
SASIN?ADDRHP
H?LENGTH
SASIN?FAMILY HP
H?ADDRTYPE
ALLOCATION DUN DESCRIPTEUR DE
IF S SOCKET HP
H?ADDRTYPE 3/#+?342%!- [
SOCKET
PERROR 3ERVEUR PROBL¨ME CR©ATION SOCKET
EXIT
]
LIEN SOCKET AVEC ADRESSE )0 ET
IF BIND S SA SIZEOFSA [ PORT
FPRINTF STDERR 3ERVEUR PROBL¨ME CR©ATION LIEN
EXIT
] ATTENTE DE DEMANDE DE
LISTEN S "!#+,/' CONNEXION
FPRINTF STDOUT 3ERVICE D SUR S EN ATTENTE<NSASIN?PORTLOCALHOST
FPRINTF STDOUT TYPE DADRESSE D ?NSASIN?FAMILY
3OCKET EXEMPLE SERVEUR
FOR COUNT?REQ COUNT?REQ -!82%1 COUNT?REQ [
T ACCEPT S ISA I ATTEND UNE REQUªTE SUER LA PRIMITIVE
FPRINTF STDOUT 2EQUªTE D<N COUNT?REQ ACCEPT
3OCKET EXEMPLE SERVEUR
VOID QUIEST SOCK PROC©DURE DE TRAITEMENT DE LA REQUªTE
INT SOCK
[
STRUCT PASSWD
P
CHAR BUF;"5&3):%=
INT I