From 5f438e59fe1ff190c23033cbc5796314f80cec8a Mon Sep 17 00:00:00 2001 From: Flavien Haas Date: Tue, 29 Oct 2019 14:23:30 +0100 Subject: [PATCH] ajout de la fonction traite_connexion --- serveur_echo.c | 61 ++++++++++++++++++++++++++----------------------- serveur_echo.o | Bin 13328 -> 13392 bytes 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/serveur_echo.c b/serveur_echo.c index 76b38e1..79879a3 100755 --- a/serveur_echo.c +++ b/serveur_echo.c @@ -10,12 +10,9 @@ struct addrinfo *result; // tableau des adresses réseaux des clients -// to do : con_client, traite_connexion +// to do : 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)); @@ -48,15 +45,38 @@ void con_client(int *sfd){ } } +void traite_connexion(int sfd, int s){ + ssize_t nread; + char buf[BUF_SIZE]; + struct sockaddr_storage peer_addr; + socklen_t peer_addr_len; + // Lit les datagrammes et les renvoi au client + for (;;) { + peer_addr_len = sizeof(struct sockaddr_storage); + nread = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &peer_addr, &peer_addr_len); + if (nread == -1){ + continue; + /* ignore la mauvaise requete */ + } + char host[NI_MAXHOST], service[NI_MAXSERV]; + s = getnameinfo((struct sockaddr *) &peer_addr, peer_addr_len, host, NI_MAXHOST, service, NI_MAXSERV, NI_NUMERICSERV); + if (s == 0){ + printf("Recu %ld octets de %s:%s\n", (long) nread, host, service); + } + else{ + fprintf(stderr, "getnameinfo: %s\n", gai_strerror(s)); + } + if (sendto(sfd, buf, nread, 0, (struct sockaddr *) &peer_addr, peer_addr_len) != nread){ + fprintf(stderr, "Erreur d'envoi de la reponse\n"); + } + } +} + int main(int argc, char *argv[]){ struct addrinfo hints; int s; // s code de retour de getaddrinfo int sfd; // code de retour de l'ouverture du socket - struct sockaddr_storage peer_addr; - socklen_t peer_addr_len; - ssize_t nread; - char buf[BUF_SIZE]; if (argc != 2) { // test du nombre d'arguments entrés fprintf(stderr, "Usage: %s port\n", argv[0]); @@ -65,7 +85,8 @@ int main(int argc, char *argv[]){ char* ip = argv[1]; // récupération de l'ip passée en paramètre du programme - // remplissage de la structure config réseau serveur + // 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 @@ -78,23 +99,7 @@ int main(int argc, char *argv[]){ freeaddrinfo(result); // libère la structure d'adresse client - // Lit les datagrammes et les renvoi au client - for (;;) { - peer_addr_len = sizeof(struct sockaddr_storage); - nread = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &peer_addr, &peer_addr_len); - if (nread == -1){ - continue; /* ignore la mauvaise requete */ - } - char host[NI_MAXHOST], service[NI_MAXSERV]; - s = getnameinfo((struct sockaddr *) &peer_addr, peer_addr_len, host, NI_MAXHOST, service, NI_MAXSERV, NI_NUMERICSERV); - if (s == 0){ - printf("Recu %ld octets de %s:%s\n", (long) nread, host, service); - } - else{ - fprintf(stderr, "getnameinfo: %s\n", gai_strerror(s)); - } - if (sendto(sfd, buf, nread, 0, (struct sockaddr *) &peer_addr, peer_addr_len) != nread){ - fprintf(stderr, "Erreur d'envoi de la reponse\n"); - } - } + traite_connexion(sfd, s); + + } diff --git a/serveur_echo.o b/serveur_echo.o index 0c3fa2dfa36374bbf10b845ce81572fa6848d1d2..44376fc01d2aa7d402145813a787b0c9d6349438 100755 GIT binary patch delta 1614 zcmZ8hZA=_R7@j@u6ar%!vHPp_8sloBEkLb}lS)59cTUs=-fp2|5%l1;$dD&}H8u)M8o z4c|&ff)J{Nvs6V>!a7xMQneEh+Mvn}d~WDx3kXp>o6+zl5hq`O3{@RF z9UPj~&P@zjS8nPbA_yAmklbzOl2@jQei+WQXOovr@qDj(HfeOJ{z&E3V`B9re1vpU z+x0n1WI)&C#&nn zm{?L3*+7ky@RkzFN-I>G&D=4JbZiLrB<4}WTU3jUfGzNB4l1b*P2-*VD^Q|}Cqtv* zj3LIbEOKknFpLf@*7mPqQ0>z`6U@QtEFVLa^t^zq+UH$}PTQX>1Vr>dA*^_^(QuZC zv1j3;nzmg+4P~g-avJlYGS_)<>?KIwdXa~!j;G85qN3P_i}mP0Q9nTxRZWKVhs{)Z zUHi?^&mrjES|fakYB#1ZGd-Z1%fmwTAuh7llMyE$%guC=>zEa7$tAPPl&j&%T)Ar) z33FE_ZYL0qisC3_qTwx@IEiD&Gd1(TcokJsok*-4G7)K|J-&P(p3=WVl(jcWeE~%J zCl}gQh(b?O&67d}7wXZYUxG<{mUv=m&oX47AD%`y4&X0T*;MZytS80XyG~izb(FbEsZ<5cd+&$xU zeeH}mdWZXa<#E{;3d+6xviGPwN?Ltne{j@00FN)=_sio00Y8z4y#s#o-l#kl8VZsC zFE_D`%5v{mz&9ud$vXjmuWx8T_6JE{0Xb7a3dnRNOri>AV;4-OjgLWBLf8;iO#y;G zf&9S+q^E^?HYHU@`gY_lzb5#_B0@%7Io`rKPMWhM$6p5r#hZH$=kdNgemsv4=kfP* ze9t{We#LB`;8Y&}B9AB8iH5r8ujP4f(( F{Qs)1-Pr&D delta 1541 zcmZ8hacCP=7=M@M+`80WLRZaD*OU>BBCeNgnCa>g+~MoimX;FSl#<2lT!vjcl2k+q zsiX&eoClqcDGF*3)FA^Wp&Cm&vs!37oMxy{5u_C-H|QVzBaTcu&+pwGG7|dU?|#4g z-tYU~cdxISnodoxa$lVL^*PT#D?%JXs2>LV4N#FgbJM8v*GT8V{mneEdteCkI{yG)4kGm6 zxxqHN=?u6}{Z?52{kFJ#`T6(W`04Mh8#KU&9ljR&65sDR0Y=+l*`qMrFjA!}{9n#| z1Z$F8Tp?GncJDWkNW6tfu8zr4wA=+zn8fs6vVe)ShDqP5{%I3v>UbTiIUTF9HLQZD zfJmfTAy-4f%sv}d=a~pGIwtFwMDqc7hWuHu!%a!%Mf5BJlezlEdIi$Y~ zy10V1nJ!j@vd=J#30S1&%2-pvz-C!zd!nS$t7+`5ew;Z$(eR85^9&3@VJGV53_SK~ z3cAfQocEbvdZ;t|44QB8=Ian<6^8`n2_RV0?haRHOk1tH3`yYQ{>EXWisgeyJmgtXr#^68xUmgaL6#&#?vN>1Gc>!jG zdbNkHz(aJ%@E@n;*3VjFnZzmiDW5;%J3E%n(qZ8!Eeio|ptLS@xak_-lDK4F2(vaW z+W3Qwt2X{&$7+_a0rDz>&I@kyLo>Dk2UZY8~Div z&dvk)9r-`OL_>hqz~67+A2;yNDGBcNEH