From 13f7f1592fbf9c94d4ef7e0e738753817538f723 Mon Sep 17 00:00:00 2001 From: fumiama Date: Wed, 17 Feb 2021 16:44:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/server.c b/server.c index 437531d..5b294de 100644 --- a/server.c +++ b/server.c @@ -50,7 +50,7 @@ DICTBLK dict; void acceptClient(); void acceptTimer(void *p); int bindServer(uint16_t port, u_int try_times); -int checkBuffer(int accept_fd); +int checkBuffer(int accept_fd, int *s); int closeDict(FILE *fp); off_t fileSize(const char* fname); void handleAccept(void *accept_fd_p); @@ -243,17 +243,16 @@ int s5_list(int *s, int accept_fd) { } else return sendData(accept_fd, "erro", 4); } -int checkBuffer(int accept_fd) { - static int s = -1; - printf("Status: %d\n", s); - switch(s) { - case -1: return sm1_pwd(&s, accept_fd); break; - case 0: return s0_init(&s, accept_fd); break; - case 1: return s1_get(&s, accept_fd); break; - case 2: return s2_set(&s, accept_fd); break; - case 3: return s3_setData(&s, accept_fd); break; - case 4: return s4_del(&s, accept_fd); break; - case 5: return s5_list(&s, accept_fd); break; +int checkBuffer(int accept_fd, int *s) { + printf("Status: %d\n", *s); + switch(*s) { + case -1: return sm1_pwd(s, accept_fd); break; + case 0: return s0_init(s, accept_fd); break; + case 1: return s1_get(s, accept_fd); break; + case 2: return s2_set(s, accept_fd); break; + case 3: return s3_setData(s, accept_fd); break; + case 4: return s4_del(s, accept_fd); break; + case 5: return s5_list(s, accept_fd); break; default: return -1; break; } } @@ -287,12 +286,13 @@ void handleAccept(void *p) { if (pthread_create(&thread, NULL, (void *)&acceptTimer, p)) perror("Error creating timer thread"); else puts("Creating timer thread succeeded"); sendData(accept_fd, "Welcome to simple dict server.", 31); + int s = -1; while((numbytes = recv(accept_fd, buff, BUFSIZ, 0)) > 0) { touchTimer(p); buff[numbytes] = 0; printf("Get %zd bytes: %s\n", numbytes, buff); puts("Check buffer"); - if(!checkBuffer(accept_fd)) break; + if(!checkBuffer(accept_fd, &s)) break; } fprintf(stderr, "Recv %zd bytes\n", numbytes); close(accept_fd);