diff --git a/a.out b/a.out index b44fe3b..6f86970 100755 Binary files a/a.out and b/a.out differ diff --git a/mini_serv.c b/mini_serv.c index bdd71b7..8028920 100644 --- a/mini_serv.c +++ b/mini_serv.c @@ -33,55 +33,47 @@ void putstr(int fd, char *str) { write(fd, str, strlen(str)); } -void error(char *str, int code) { +void error(char *str) { putstr(2, str); - exit(code); + exit(1); } int main(int ac, char **av) { - int port; - int sockfd; -// int connfd; -// int len; - struct sockaddr_in servaddr; -// struct cli; + int port; + int server_fd; + int client_fd; + char buf[1024]; + struct sockaddr_in addr; + socklen_t len; + fd_set fds; - if (ac < 1) - error("Wrong number of arguments\n", 1); - port = atoi(av[1]); - if (port == -1) - error("Fatal error\n", 1); + if (ac != 2) + error("Wrong number of arguments\n"); + if ( (port = atoi(av[1])) == -1) + error("Fatal error\n"); - // socket create and verification - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd == -1) - error("socket creation failed...\n", 0); - else - putstr(1, "Socket successfully created..\n"); - bzero(&servaddr, sizeof(servaddr)); + if ( (server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) + error("Fatal error\n"); + bzero(&addr, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(2130706433); //127.0.0.1 + addr.sin_port = htons(port); - // assign IP, PORT - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr = htonl(2130706433); //127.0.0.1 - servaddr.sin_port = htons(8081); + len = sizeof(addr); + if (bind(server_fd, (const struct sockaddr *)&addr, len) == -1) + error("Fatal error\n"); + if (listen(server_fd, 10) == -1) + error("Fatal error\n"); -// // Binding newly created socket to given IP and verification -// if ((bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr))) != 0) { -// printf("socket bind failed...\n"); -// exit(0); -// } -// else -// printf("Socket successfully binded..\n"); -// if (listen(sockfd, 10) != 0) { -// printf("cannot listen\n"); -// exit(0); -// } -// len = sizeof(cli); -// connfd = accept(sockfd, (struct sockaddr *)&cli, &len); -// if (connfd < 0) { -// printf("server acccept failed...\n"); -// exit(0); -// } -// else -// printf("server acccept the client...\n"); + while (1) { + if ( (client_fd = accept(server_fd, (struct sockaddr *)&addr, &len)) == -1) + error("Fatal error\n"); + FD_ZERO(&fds); + FD_SET(client_fd, &fds); + select(client_fd + 1, &fds, NULL, NULL, NULL); + if (FD_ISSET(client_fd, &fds)) + recv(client_fd, buf, 1024, 0); + } + return (0); } +