From 79bd2194539aa559078de9afb1500a2e754ee501 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Sun, 13 Jul 2014 19:54:47 -0400 Subject: Added server --- server.c | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 server.c (limited to 'server.c') diff --git a/server.c b/server.c new file mode 100644 index 0000000..fe8b6f8 --- /dev/null +++ b/server.c @@ -0,0 +1,131 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "joshua.h" +#define PORT 1029 +int server_socket; +int pipes[FD_SETSIZE][2]; +int make_server_socket(uint16_t port) +{ + int sock; + struct sockaddr_in name; + sock=socket(AF_INET, SOCK_STREAM, 0); + if(sock<0) + { + printf("error creating socket.\n"); + return -1; + } + name.sin_family=AF_INET; + name.sin_port=htons(port); + name.sin_addr.s_addr=htonl(INADDR_ANY); + int ret=bind(sock, (struct sockaddr*) &name, sizeof(name)); + if(ret<0) + { + printf("error binding to port %d\n", port); + return -1; + } + return sock; +} +int process_data(int fd) +{ + char buf[1024]; + memset(buf, 0, sizeof(buf)); + int ret=read(fd, buf, sizeof(buf)); + if(ret<0) /* error */ + { + printf("error in read()\n"); + return -1; + } + if(ret==0) + { + printf("EOF from client\n"); + return -1; + } + else + { + write(pipes[fd][1], buf, strlen(buf)); + } +} +void serv_cleanup() +{ + printf("preparing to exit...\n"); + fflush(stdout); + close(server_socket); +} +int main(int argc, char* argv[]) +{ + printf("starting server...\n"); + signal(SIGINT, &serv_cleanup); + int sock=make_server_socket(PORT); + server_socket=sock; + fd_set active_fd_set, read_fd_set; + struct sockaddr_in client; + if(listen(sock, 1)<0) + { + printf("error listening.\n"); + return 1; + } + FD_ZERO(&active_fd_set); + FD_SET(sock, &active_fd_set); + printf("listening on port %d\n", PORT); + while(1) + { + read_fd_set=active_fd_set; + int ret=select(FD_SETSIZE, &read_fd_set, 0,0,0); + if(ret<0) + { + printf("select() returned error.\n"); + return 1; + } + for(int i=0;i