diff --git a/a.out b/a.out index 6f86970..d6d0239 100755 Binary files a/a.out and b/a.out differ diff --git a/mini_serv.c b/mini_serv.c index 8028920..2f6842c 100644 --- a/mini_serv.c +++ b/mini_serv.c @@ -38,6 +38,24 @@ void error(char *str) { exit(1); } +int init_socket(struct sockaddr_in *addr, int len, int port) { + int server_fd; + + if ( (server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) + error("Fatal error\n"); + bzero(addr, len); + addr->sin_family = AF_INET; + addr->sin_addr.s_addr = htonl(2130706433); //127.0.0.1 + addr->sin_port = htons(port); + + if (bind(server_fd, (const struct sockaddr *)addr, len) == -1) + error("Fatal error\n"); + if (listen(server_fd, 10) == -1) + error("Fatal error\n"); + + return server_fd; +} + int main(int ac, char **av) { int port; int server_fd; @@ -51,19 +69,9 @@ int main(int ac, char **av) { error("Wrong number of arguments\n"); if ( (port = atoi(av[1])) == -1) error("Fatal error\n"); - - 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); - 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"); + + server_fd = init_socket(&addr, len, port); while (1) { if ( (client_fd = accept(server_fd, (struct sockaddr *)&addr, &len)) == -1) @@ -71,8 +79,10 @@ int main(int ac, char **av) { FD_ZERO(&fds); FD_SET(client_fd, &fds); select(client_fd + 1, &fds, NULL, NULL, NULL); - if (FD_ISSET(client_fd, &fds)) + if (FD_ISSET(client_fd, &fds)) { recv(client_fd, buf, 1024, 0); + putstr(1, buf); + } } return (0); }