diff options
author | LAN-TW <lantw44@gmail.com> | 2013-10-13 15:51:12 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2013-10-13 15:51:12 +0800 |
commit | 10588f724677e532c49d4eeadce3b9e73321d37d (patch) | |
tree | 39ba995e4d8c228f1f63e6c4b8229c793d6c4347 | |
parent | 4db93c415b40956381918a7a524299d0d7d2d6c7 (diff) | |
download | sp2013-10588f724677e532c49d4eeadce3b9e73321d37d.tar.gz sp2013-10588f724677e532c49d4eeadce3b9e73321d37d.tar.zst sp2013-10588f724677e532c49d4eeadce3b9e73321d37d.zip |
HW1: 現在 procconn 不需要 callback 也不需要存取全域變數了
-rw-r--r-- | hw1/main.c | 22 | ||||
-rw-r--r-- | hw1/proc.h | 9 | ||||
-rw-r--r-- | hw1/proc_r.c | 13 | ||||
-rw-r--r-- | hw1/proc_w.c | 13 |
4 files changed, 21 insertions, 36 deletions
@@ -14,18 +14,18 @@ #include <sys/time.h> #include <unistd.h> -volatile sig_atomic_t proc_message_request; -volatile sig_atomic_t proc_quit_request; - -static void proc_message_request_setter (int signo) { - proc_message_request = 1; -} +static volatile sig_atomic_t proc_message_request; +static volatile sig_atomic_t proc_quit_request; static void proc_quit_request_setter (int signo) { proc_quit_request = 1; } -static void message_cb (server* svr, request* req, int maxfd) { +static void proc_message_request_setter (int signo) { + proc_message_request = 1; +} + +static void proc_message_print (server* svr, request* req, int maxfd) { putchar ('\n'); printf ( @@ -139,8 +139,12 @@ int main (int argc, char** argv) { printf("\nstarting on %.80s, port %d, fd %d, maxfd %d ...\n", svr.hostname, svr.port, svr.listen_fd, maxfd); - while (procconn(&svr, requestP, maxfd, - (struct timeval) { 1, 0 }, message_cb)); + while (!proc_quit_request) { + procconn (&svr, requestP, maxfd, (struct timeval) { 1, 0 }); + if (proc_message_request) { + proc_message_print (&svr, requestP, maxfd); + } + } printf("\nquitting...\n"); @@ -3,13 +3,8 @@ #include "server.h" #include <stdbool.h> -#include <signal.h> +#include <sys/time.h> -extern volatile sig_atomic_t proc_message_request; -extern volatile sig_atomic_t proc_quit_request; - -typedef void (*svr_msg)(server* svr, request* req, int maxfd); -bool procconn (server* svr, request* req, int maxfd, - struct timeval timeout, svr_msg message_cb); +void procconn (server* svr, request* req, int maxfd, struct timeval timeout); #endif /* SP_HW1_PROC_H */ diff --git a/hw1/proc_r.c b/hw1/proc_r.c index 4370015..b724985 100644 --- a/hw1/proc_r.c +++ b/hw1/proc_r.c @@ -20,8 +20,7 @@ #include <sys/types.h> #include <unistd.h> -bool procconn(server* svr, request* req, int maxfd, - struct timeval timeout, svr_msg message_cb) { +void procconn(server* svr, request* req, int maxfd, struct timeval timeout) { fd_set rset = svr->readfds; fd_set wset = svr->writefds; @@ -31,16 +30,10 @@ bool procconn(server* svr, request* req, int maxfd, rval = select (maxfd, &rset, &wset, &eset, &select_timeout); - if (proc_message_request) - (*message_cb)(svr, req, maxfd); - - if (proc_quit_request) - return false; - if (rval < 0) { if (errno != EINTR) perror ("select"); - return true; + return; } for (int i = 0; i < maxfd; i++) { @@ -174,6 +167,6 @@ bool procconn(server* svr, request* req, int maxfd, } } - return true; + return; } diff --git a/hw1/proc_w.c b/hw1/proc_w.c index 9312c4e..f58bf35 100644 --- a/hw1/proc_w.c +++ b/hw1/proc_w.c @@ -17,8 +17,7 @@ #include <sys/types.h> #include <unistd.h> -bool procconn(server* svr, request* req, int maxfd, - struct timeval timeout, svr_msg message_cb) { +void procconn(server* svr, request* req, int maxfd, struct timeval timeout) { fd_set rset = svr->readfds; fd_set wset = svr->writefds; @@ -28,16 +27,10 @@ bool procconn(server* svr, request* req, int maxfd, rval = select (maxfd, &rset, &wset, &eset, &select_timeout); - if (proc_message_request) - (*message_cb)(svr, req, maxfd); - - if (proc_quit_request) - return false; - if (rval < 0) { if (errno != EINTR) perror ("select"); - return true; + return; } for (int i = 0; i < maxfd; i++) { @@ -183,5 +176,5 @@ bool procconn(server* svr, request* req, int maxfd, } } - return true; + return; } |