From 5ad7a5b0dfa1b10e56964e70cf14c5d9431881f5 Mon Sep 17 00:00:00 2001 From: Flavien Haas Date: Tue, 29 Oct 2019 12:42:43 +0100 Subject: [PATCH] ajout fonction cree_socket --- serveur_echo.c | 47 +++++++++++++++++++++++++++++++++-------------- serveur_echo.o | Bin 13200 -> 13280 bytes 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/serveur_echo.c b/serveur_echo.c index 1bb791b..4ac34b8 100755 --- a/serveur_echo.c +++ b/serveur_echo.c @@ -8,31 +8,50 @@ #define BUF_SIZE 500 +struct addrinfo *result; // tableau des adresses réseaux des clients + +// affiche_adresse_socket, serveur et traite_connexion + +int cree_socket(struct addrinfo hints, char* ip){ + //remplissage de la structure hints contenants la configuration réseau du serveur + memset(&hints, 0, sizeof(struct addrinfo)); + + int s = getaddrinfo(NULL, ip, &hints, &result); + if (s != 0) { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); + s = 1; + } + return s; +} + int main(int argc, char *argv[]){ struct addrinfo hints; - struct addrinfo *result, *rp; - int sfd, s; + struct addrinfo *rp; + int sfd, s; // s code de retour de getaddrinfo struct sockaddr_storage peer_addr; socklen_t peer_addr_len; ssize_t nread; char buf[BUF_SIZE]; - if (argc != 2) { + if (argc != 2) { // test du nombre d'arguments entrés fprintf(stderr, "Usage: %s port\n", argv[0]); exit(EXIT_FAILURE); } - //remplissage de la structure hints contenants la configuration réseau du serveur - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_INET6; // utilisation du serveur sur IPv6 (AF_UNSPEC pour IPv4/6) - hints.ai_socktype = SOCK_DGRAM; // socket en mode datagramme + char* ip = argv[1]; - s = getaddrinfo(NULL, argv[1], &hints, &result); - if (s != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); + // remploissage de la structure config réseau serveur + hints.ai_family = AF_INET6; // utilisation du serveur sur IPv6 (AF_UNSPEC pour IPv4/6) + hints.ai_socktype = SOCK_DGRAM; // socket en mode datagramme + + s = cree_socket(hints, ip); // création du socket + if(s == 1) { exit(EXIT_FAILURE); } + + + /* getaddrinfo () retourne une liste de structures d'adresses. Essayez chaque adresse jusqu'à ce que nous ayons réussi à bind(2). Si socket() (ou bind()) échoue, nous (fermons le socket et) @@ -45,20 +64,20 @@ int main(int argc, char *argv[]){ } if (bind(sfd, rp->ai_addr, rp->ai_addrlen) == 0){ - break; /* Succès */ + break; // Succès } close(sfd); } - if (rp == NULL) { /* Aucune adresse n'a pu marcher */ + if (rp == NULL) { // Aucune adresse n'a pu marcher fprintf(stderr, "Could not bind\n"); exit(EXIT_FAILURE); } - freeaddrinfo(result); /* libère le buffer */ + freeaddrinfo(result); // libère - /* Lit les datagrammes et les renvois au client */ + // Lit les datagrammes et les renvois au client for (;;) { peer_addr_len = sizeof(struct sockaddr_storage); diff --git a/serveur_echo.o b/serveur_echo.o index 2f4945eb41ee059fd2c67a8adc564e7aac4e9e07..c46a99dabcb13ff4d5b2c3bdd2f5ff70701950bc 100755 GIT binary patch delta 1821 zcmZWqZ%7or_fT$U}dQ%eb@BGWoA;Z?+?9cifhz}@*{QOd2eJhSF$kdv7kuECEttCdLdm&en>}Nb=o}H4lO;0_ z`jv=pfkqrx98w9qvc>xdE{- zIC6=tWZ!K>=#G*um6X|nz)5E4{Uu8{Dn3DI_2pw#DgVbbSH#aT+-6z1o_u7fQH zn+59uyNtDD_bOI9Ar@nN{I6-MVmg&bGn@h~W+yi4XiA+u4)=sLC`!!WR3Za1M67gT zMjLlStc(`Pw@hHaA;1<@oKGd@O-`Y=xe51+w8T7hz*>Z!C8GsA#xj#cD7AweuWH-N zNJGV{VnD(6245XbyQ!E!ShwV3rMMSV8;6v_+T@+dtnoVRb~O8yYBmTM3J90d z0=$L{P*}tI0#C(jRO%t>8_w}`r2)_<^s-K?%k8>O7mXeoKvj4v{Sr@nMSPO_X$y22 z8flS%OY|@D5M{;v1Z_m)FZkGELUB(4z`DLg3(}`OyR@zaE1drP0t8PZ<2&lFY=FmR z3-#96CaODauQXPd)?ooUY}#4^l%$cG-nI?~U1nUcwto*^_e-pMpLCCE6kbX&5v44NNUbO_k-(}Wx zlN-eo)dO-o7z#y)M*G99d`+wXb;p7OGM(~~a5PRjxiW5yuNe;U;l8*WkMSXyT;vW{ z$YW7HR4b3Z8Xf|Q9}emSW+) z^Ku-ujs%BB(aESB8yk+JHn=k6LfJC-Y&}9hJ|L`Lw(J_HiqINq5o(irFZfYlIN&3N z_OnUfFK*w1XH)fSeV*mrX9`#E?v v2d8sz=3z{F8;=)3+n@t5=;KgI8Sfs$!+*;EMVB5HU9v=%Y|+UtjkEs&tl$S8 delta 1605 zcmZuxacCP=7=OufxTQ;TovWs>eeZ&e{3;ru34Z>Vv@@8 zM~I_6$$1>6KI$KeFc2|dz(Cz7t<`K4({{tPB3S>CvVXk7z#&rlkDlMVdn@Dc$h+@- zzwh^b-|xMbdt32xynNVkX{L4Y5Z{E510mGE4_@%_O*0S9vBzSr^zE%fOr2neWvy9sngS)KVP|gv2mRQ zxUhpKQSQx_9;mY)vW~;xVT9*yb6$>Yab>dZ=E!7ISMf&|LRbxBReXe19&0E6fHuL^ z{?f|XQe8g?&JT2J6#3z`gu+*!A6%euxOy#~V0T0&EW3HpL29;=_G<%;GQto^x(}~^-ELd5QE^UPZ9W+f9 z=dmKz@Km7&P10r)v8G;gL8PXpK^Bd{szYDO8uOs(V#xuOj8xvXEt8) z5z!+&MTzRoV`SXZ=H7*LYtzX`9$(SqX{T>NRt@RD(4hPsNZ5WErf?p8<|c-%^Qb`p z&f^m^v_w5v#;0b(JCL0*v#S8_Nj5id)8^J_lC|9uNWhQAK)b6Ur3F#Q(||1haFe}Lc4M&nYS;Li%_ zR3_&}aVZy##WIQHSc;-t+Cr=f!Sqde`0o% z*$2!%WOj#H#BLZjvxk{I%4}dRDtyWJIwKQTBhoc#bTTJJu1e9EltEn+(L@sY;lSWx zDL(^-K948glHp)?@$tpj4iVU2_*qZ4&40n>(?veX@3Z*>HlKdYPx2#{|J+`~aT_5| z+CrV8Vnd0||IFrpVe{egKpfc!z373j48gww?IA}56#1V`i_lFY;ob`U<`Mc2j-1a&