summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLAN-TW <lantw44@gmail.com>2013-10-13 15:51:12 +0800
committerLAN-TW <lantw44@gmail.com>2013-10-13 15:51:12 +0800
commit10588f724677e532c49d4eeadce3b9e73321d37d (patch)
tree39ba995e4d8c228f1f63e6c4b8229c793d6c4347
parent4db93c415b40956381918a7a524299d0d7d2d6c7 (diff)
downloadsp2013-10588f724677e532c49d4eeadce3b9e73321d37d.tar.gz
sp2013-10588f724677e532c49d4eeadce3b9e73321d37d.tar.zst
sp2013-10588f724677e532c49d4eeadce3b9e73321d37d.zip
HW1: 現在 procconn 不需要 callback 也不需要存取全域變數了
-rw-r--r--hw1/main.c22
-rw-r--r--hw1/proc.h9
-rw-r--r--hw1/proc_r.c13
-rw-r--r--hw1/proc_w.c13
4 files changed, 21 insertions, 36 deletions
diff --git a/hw1/main.c b/hw1/main.c
index cec60c8..f48fd2e 100644
--- a/hw1/main.c
+++ b/hw1/main.c
@@ -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");
diff --git a/hw1/proc.h b/hw1/proc.h
index 35654a3..01e0e30 100644
--- a/hw1/proc.h
+++ b/hw1/proc.h
@@ -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;
}