From baf9351a86c42e0546e0344dfec2a4adcd697c7f Mon Sep 17 00:00:00 2001 From: asus Date: Thu, 23 Feb 2023 18:57:38 +0100 Subject: [PATCH] wip new version with memory allocation --- a.out | Bin 0 -> 16944 bytes mini_serv_2.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100755 a.out create mode 100644 mini_serv_2.c diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..cf5e79094fc14e71d6b46a9b1ebcef14cd46b63a GIT binary patch literal 16944 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 +#include +#include +#include +#include +#include +#include +#include + +// accept +// atoi +// bind +// bzero +// calloc +// close +// exit +// free +// listen +// malloc +// memset +// realloc +// recv +// select +// send +// socket +// sprintf +// strcat +// strcpy +// strlen +// strstr +// write + +#define BUFSIZE 1024 + +typedef struct s_client { + int fd; + int id; + char *msg; + struct s_client *next; +} t_client; + +void error(char *msg) { + write(2, msg, strlen(msg)); + exit(1); +} + +int extract_message(char **buf, char **msg) +{ + char *newbuf; + int i; + + *msg = 0; + if (*buf == 0) + return (0); + i = 0; + while ((*buf)[i]) + { + if ((*buf)[i] == '\n') + { + newbuf = calloc(1, sizeof(*newbuf) * (strlen(*buf + i + 1) + 1)); + if (newbuf == 0) + return (-1); + strcpy(newbuf, *buf + i + 1); + *msg = *buf; + (*msg)[i + 1] = 0; + *buf = newbuf; + return (1); + } + i++; + } + return (0); +} + +char *str_join(char *buf, char *add) +{ + char *newbuf; + int len; + + if (buf == 0) + len = 0; + else + len = strlen(buf); + newbuf = malloc(sizeof(*newbuf) * (len + strlen(add) + 1)); + if (newbuf == 0) + return (0); + newbuf[0] = 0; + if (buf != 0) + strcat(newbuf, buf); + free(buf); + strcat(newbuf, add); + return (newbuf); +} + +int main(int ac, char **av) { + int sockfd; + int client_fd; + int maxfd; + struct sockaddr_in servaddr; + fd_set read_set; + fd_set write_set; + t_client *client; + t_client *first_client; + + if (ac != 2) + error("Wrong number of arguments\n"); + client = NULL; + first_client = client; + + // socket create and verification + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd == -1) + error("Fatal error\n"); + bzero(&servaddr, sizeof(servaddr)); + + // assign IP, PORT + servaddr.sin_family = AF_INET; + servaddr.sin_addr.s_addr = htonl(2130706433); //127.0.0.1 + servaddr.sin_port = htons(atoi(av[1])); + + // Binding newly created socket to given IP and verification + if ((bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr))) == -1) + error("Fatal error\n"); + if (listen(sockfd, 10) == -1) + error("Fatal error\n"); + + while(1) { + maxfd = sockfd; + FD_ZERO(&read_set); + FD_ZERO(&write_set); + client = first_client; + while(client) { + FD_SET(client->fd, &read_set); + FD_SET(client->fd, &write_set); + if (client->fd > maxfd) + maxfd = client_fd; + client = client->next; + } + + select(maxfd + 1, &read_set, &write_set, NULL, NULL); + + if (FD_ISSET(sockfd, &read_set)) { + client_fd = accept(sockfd, NULL, NULL); + + } + } + return (0); +} + +