From 59db09d6f44d163a9dd5af2da3d12e67c4056a32 Mon Sep 17 00:00:00 2001 From: lapupe Date: Fri, 28 Oct 2016 14:24:15 +0200 Subject: [PATCH] perfect --- lib/communication.c | 6 +- pingpong/pingpong.c | 2 - remote/tcpdserver.c | 137 +++++++++++++++++++++++--------------------- 3 files changed, 77 insertions(+), 68 deletions(-) diff --git a/lib/communication.c b/lib/communication.c index 6896764..7effa43 100644 --- a/lib/communication.c +++ b/lib/communication.c @@ -199,11 +199,13 @@ int srv_get_new_process (char *buf, struct process *p) int srv_read (const struct service *srv, char ** buf) { + //printf("---%s\n", srv->spath); return file_read (srv->service_fd, buf); } int srv_write (const struct service *srv, const char * buf, size_t msize) { + //printf("---%s\n", srv->spath); return file_write (srv->service_fd, buf, msize); } @@ -386,12 +388,14 @@ int app_destroy (struct process *p) } int app_read (struct process *p, char ** buf) -{ +{ + //printf("---%s\n", p->path_proc); return file_read (p->proc_fd, buf); } int app_write (struct process *p, char * buf, size_t msize) { + //printf("---%s\n", p->path_proc); return file_write (p->proc_fd, buf, msize); } diff --git a/pingpong/pingpong.c b/pingpong/pingpong.c index cfe5fdb..d615a70 100644 --- a/pingpong/pingpong.c +++ b/pingpong/pingpong.c @@ -38,7 +38,6 @@ void * pongd_thread(void * pdata) { if (cfd == -1) handle_error("accept"); proc->proc_fd = cfd; - printf("ok\n"); while (1) { if ((nbytes = app_read (proc, &buf)) == -1) { @@ -56,7 +55,6 @@ void * pongd_thread(void * pdata) { if ((nbytes = app_write (proc, buf, nbytes)) == -1) { fprintf(stdout, "MAIN_LOOP: error service_write %d\n", nbytes); } - printf("write success\n"); } } diff --git a/remote/tcpdserver.c b/remote/tcpdserver.c index 83c3e1b..564044a 100644 --- a/remote/tcpdserver.c +++ b/remote/tcpdserver.c @@ -570,6 +570,7 @@ void main_loop (struct service *srv) { //request info_request tab_req[NBCLIENT]; int ret; + int i; //pid server pthread_t pid_s; //pid client @@ -627,81 +628,87 @@ void main_loop (struct service *srv) { } //printf("Server-select...OK\n"); - if(FD_ISSET(listener, &read_fds)) { - /* handle new connections */ - peer_addr_size = sizeof(struct sockaddr_un); - newfd = accept(sfd, (struct sockaddr *) &peer_addr, &peer_addr_size); - if (newfd == -1) { - handle_error("accept"); - } - else - { - printf("Server-accept() is OK...\n"); - FD_SET(newfd, &master); /* add to master set */ - if(newfd > fdmax) - { /* keep track of the maximum */ - fdmax = newfd; - } - srv->service_fd = newfd; - } - } else { - nbytes = srv_read (srv, &buf); - if ( nbytes == -1) { - handle_error("file_read"); - } else if( nbytes == 0) { - /* close it... */ - close(srv->service_fd); - /* remove from master set */ - FD_CLR(srv->service_fd, &master); - }else { - buf[BUFSIZ - 1] = '\0'; - printf ("msg received (%d) : %s\n", nbytes, buf); - if (strncmp ("exit", buf, 4) == 0) { - break; - } - - tab_req[nbclient].p = malloc(sizeof(struct process)); - // -1 : error, 0 = no new process, 1 = new process - ret = srv_get_new_request (buf, &tab_req[nbclient]); - if (ret == -1) { - perror("srv_get_new_request()"); - exit(1); - } else if (ret == 0) { - break; - } - - request_print(&tab_req[nbclient]); - - if (strcmp("listen", tab_req[nbclient].request) == 0) { - int ret = pthread_create( &pid_s, NULL, &server_thread, (void *) &tab_req[nbclient]); - if (ret) { - perror("pthread_create()"); - exit(errno); - } else { - printf("\n----------Creation of server thread ------------\n"); + for (i = 0; i <= fdmax; i++) { + if(FD_ISSET(i, &read_fds)) { + if(i == listener) { + /* handle new connections */ + peer_addr_size = sizeof(struct sockaddr_un); + newfd = accept(sfd, (struct sockaddr *) &peer_addr, &peer_addr_size); + if (newfd == -1) { + handle_error("accept"); } - nbclient++; - }else { - int ret = pthread_create( &tab_client[nbclient], NULL, &client_thread, (void *) &tab_req[nbclient]); - if (ret) { - perror("pthread_create()"); - exit(errno); - } else { - printf("\n----------Creation of client thread ------------\n"); + else + { + printf("Server-accept() is OK...\n"); + FD_SET(newfd, &master); /* add to master set */ + if(newfd > fdmax) + { /* keep track of the maximum */ + fdmax = newfd; + } } - nbclient++; + } else { + nbytes = file_read (i, &buf); + if ( nbytes == -1) { + handle_error("file_read"); + } else if( nbytes == 0) { + /* close it... */ + close(i); + /* remove from master set */ + FD_CLR(i, &master); + }else { + buf[BUFSIZ - 1] = '\0'; + printf ("msg received (%d) : %s\n", nbytes, buf); + if (strncmp ("exit", buf, 4) == 0) { + break; + } - } - } + tab_req[nbclient].p = malloc(sizeof(struct process)); + // -1 : error, 0 = no new process, 1 = new process + ret = srv_get_new_request (buf, &tab_req[nbclient]); + if (ret == -1) { + perror("srv_get_new_request()"); + exit(1); + } else if (ret == 0) { + break; + } + + request_print(&tab_req[nbclient]); + + if (strcmp("listen", tab_req[nbclient].request) == 0) { + int ret = pthread_create( &pid_s, NULL, &server_thread, (void *) &tab_req[nbclient]); + if (ret) { + perror("pthread_create()"); + exit(errno); + } else { + printf("\n----------Creation of server thread ------------\n"); + } + nbclient++; + }else { + int ret = pthread_create( &tab_client[nbclient], NULL, &client_thread, (void *) &tab_req[nbclient]); + if (ret) { + perror("pthread_create()"); + exit(errno); + } else { + printf("\n----------Creation of client thread ------------\n"); + } + nbclient++; + + } + } + } //i == listener + } //if FDISSET + }//boucle for + if (strncmp ("exit", buf, 4) == 0) { + break; } - } + }//boucle while if (pthread_cancel(pid_s) != 0) { printf("Aucun thread correspond \n"); } pthread_join(pid_s, NULL); - int i; + /*for (i = 0; i < nbclient; i++) { pthread_join(tab_client[i], NULL); }*/