diff options
author | LAN-TW <lantw44@gmail.com> | 2013-10-12 21:33:05 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2013-10-12 21:33:05 +0800 |
commit | 940e341c27f7219fa3a51687fd7157c045d1b12a (patch) | |
tree | 404e747307c1fa60c67932c323fb26e5a877d112 | |
parent | 379af3b399c146eb0da4013c22e92808baebe595 (diff) | |
download | sp2013-940e341c27f7219fa3a51687fd7157c045d1b12a.tar.gz sp2013-940e341c27f7219fa3a51687fd7157c045d1b12a.tar.zst sp2013-940e341c27f7219fa3a51687fd7157c045d1b12a.zip |
HW1: 移除所有全域變數
-rw-r--r-- | hw1/main.c | 8 | ||||
-rw-r--r-- | hw1/server.c | 35 | ||||
-rw-r--r-- | hw1/server.h | 4 |
3 files changed, 22 insertions, 25 deletions
@@ -7,8 +7,6 @@ #include <string.h> #include <unistd.h> -request* requestP = NULL; // point to a list of requests -int maxfd; // size of open file descriptor table, size of request list int main(int argc, char** argv) { if (argc != 2) { @@ -25,12 +23,14 @@ int main(int argc, char** argv) { sigaction(SIGPIPE, &pipe_action, NULL); // Get file descripter table size - maxfd = getdtablesize(); + int maxfd = getdtablesize(); // Initialize server - server_init((unsigned short) atoi(argv[1]), maxfd); + server svr; // server + server_init(&svr, (unsigned short) atoi(argv[1]), maxfd); // Initialize request table + request* requestP = NULL; // point to a list of requests requestP = (request*) e_malloc(sizeof(request) * maxfd); for (int i = 0; i < maxfd; i++) diff --git a/hw1/server.c b/hw1/server.c index 45f18d1..b65bb10 100644 --- a/hw1/server.c +++ b/hw1/server.c @@ -18,19 +18,18 @@ #include <sys/types.h> #include <unistd.h> -server svr; // server // You don't need to know how the following codes are working -void server_init(unsigned short port, int maxfd) { +void server_init(server* svr, unsigned short port, int maxfd) { struct sockaddr_in servaddr; int val, flags; - gethostname(svr.hostname, sizeof(svr.hostname)); - svr.port = port; + gethostname(svr->hostname, sizeof(svr->hostname)); + svr->port = port; - svr.listen_fd = socket(AF_INET, SOCK_STREAM, 0); - if (svr.listen_fd < 0) + svr->listen_fd = socket(AF_INET, SOCK_STREAM, 0); + if (svr->listen_fd < 0) e_err_exit("socket"); memset(&servaddr, 0, sizeof(servaddr)); @@ -38,29 +37,29 @@ void server_init(unsigned short port, int maxfd) { servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(port); val = 1; - if (setsockopt(svr.listen_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) + if (setsockopt(svr->listen_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) e_err_exit("setsockopt"); - if (bind(svr.listen_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) + if (bind(svr->listen_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) e_err_exit("bind"); - if (listen(svr.listen_fd, 1024) < 0) + if (listen(svr->listen_fd, 1024) < 0) e_err_exit("listen"); - strcpy(svr.accept_hdr, "ACCEPT\n"); - strcpy(svr.reject_hdr, "REJECT\n"); + strcpy(svr->accept_hdr, "ACCEPT\n"); + strcpy(svr->reject_hdr, "REJECT\n"); - FD_ZERO(&svr.readfds); - FD_ZERO(&svr.writefds); - FD_ZERO(&svr.exceptfds); - FD_SET(svr.listen_fd, &svr.readfds); + FD_ZERO(&svr->readfds); + FD_ZERO(&svr->writefds); + FD_ZERO(&svr->exceptfds); + FD_SET(svr->listen_fd, &svr->readfds); - flags = fcntl(svr.listen_fd, F_GETFL); + flags = fcntl(svr->listen_fd, F_GETFL); if(flags < 0){ perror("Warning: F_GETFL"); return; } - fcntl(svr.listen_fd, F_SETFL, flags | O_NONBLOCK); + fcntl(svr->listen_fd, F_SETFL, flags | O_NONBLOCK); - svr.file_table = ftab_create (maxfd); + svr->file_table = ftab_create (maxfd); } void request_init(request* reqP) { diff --git a/hw1/server.h b/hw1/server.h index c9de5e9..d519f4d 100644 --- a/hw1/server.h +++ b/hw1/server.h @@ -41,10 +41,8 @@ typedef struct { int header_accept : 1; // used by procconn to know if ACCEPT/REJECT is sent } request; -extern server svr; // server - // initailize a server, exit for error -void server_init (unsigned short port, int maxfd); +void server_init (server* svr, unsigned short port, int maxfd); // initailize a request instance void request_init (request* reqP); |