diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2ee54cf --- /dev/null +++ b/Makefile @@ -0,0 +1,55 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: vvaas +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2023/08/09 15:08:49 by vvaas #+# #+# # +# Updated: 2023/11/29 16:17:31 by vvaas ### ########.fr # +# # +# **************************************************************************** # + +NAME = ircserv + +SRCS = srcs/main.cpp \ + +OBJ_DIR = objs +OBJS = $(addprefix $(OBJ_DIR)/, $(SRCS:.cpp=.o)) + +CC = c++ +CFLAGS = -std=c++98 -Wall -Wextra -Werror + +DEBUG ?= false +MODE = "release" + +ifeq ($(DEBUG), true) + CFLAGS += -g -D DEBUG + MODE = "debug" +endif + +RM = rm -rf + +$(OBJ_DIR)/%.o: %.cpp + @echo "\e[1;32m[compiling "$(MODE)" {"$(CC)"}...]\e[1;00m "$< + @$(CC) $(CFLAGS) $(COPTS) -c $< -o $@ + +all: $(NAME) + +$(NAME): $(OBJ_DIR) $(OBJS) + @echo "\e[1;32m[linking "$(MODE)" {"$(CC)"}...]\e[1;00m "$@ + @$(CC) -o $(NAME) $(OBJS) + @echo "\e[1;32m[build finished]\e[1;00m" + +$(OBJ_DIR): + @mkdir -p $(sort $(addprefix $(OBJ_DIR)/, $(dir $(SRCS)))) + +clean: + @$(RM) $(OBJ_DIR) + +fclean: clean + @$(RM) $(NAME) + +re: fclean all + +.PHONY: all clean fclean re diff --git a/includes/irc.hpp b/includes/irc.hpp index 8b04bc6..6f26063 100644 --- a/includes/irc.hpp +++ b/includes/irc.hpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/11/29 13:24:01 by vvaas #+# #+# */ -/* Updated: 2023/11/29 13:45:51 by vvaas ### ########.fr */ +/* Updated: 2023/11/29 16:32:34 by vvaas ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,4 +17,8 @@ # include # include # include +# include +# include +# include + #endif diff --git a/ircserv b/ircserv new file mode 100755 index 0000000..cb9af2e Binary files /dev/null and b/ircserv differ diff --git a/objs/srcs/main.o b/objs/srcs/main.o new file mode 100644 index 0000000..1ddf1b6 Binary files /dev/null and b/objs/srcs/main.o differ diff --git a/srcs/main.cpp b/srcs/main.cpp index 639780a..6e890bb 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/11/24 10:40:01 by maldavid #+# #+# */ -/* Updated: 2023/11/29 14:03:14 by vvaas ### ########.fr */ +/* Updated: 2023/11/29 16:43:45 by vvaas ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,19 +16,64 @@ unsigned long get_port(char *port) { if (!port) return (0); - return (std::atoi(port)); + if (std::atoi(port) < 1) + std::terminate(); + return (htons(std::atoi(port))); +} + +void init_socket(sockaddr_in &s_data, int &s_socket, char *port) +{ + s_data.sin_family = AF_INET; + s_data.sin_addr.s_addr = INADDR_ANY; + s_data.sin_port = get_port(port); + s_socket = socket(PF_INET, SOCK_STREAM, 0); + if (s_socket < 0) + { + std::cerr << "Fatal Error : socket error" << std::endl; + std::terminate(); + } + std::cout << "Socket creating succesful" << std::endl; + if (bind(s_socket, (struct sockaddr *)&s_data, sizeof(sockaddr)) != 0) + { + std::cerr << "Fatal Error : bind error" << std::endl; + std::terminate(); + } + std::cout << "bind succesful, starting listen loop" << std::endl; + if (listen(s_socket, 20) != 0) + { + std::cerr << "Fatal Error : listen error" << std::endl; + std::terminate(); + } + std::cout << "listen queue created succesful" << std::endl; +} + +void write_info(sockaddr_in s_data, int s_socket) +{ + std::cout << "My port is : " << ntohl(s_data.sin_port) << std::endl; + std::cout << "I created a socket, n`" << s_socket << std::endl; } int main(int argc, char** argv) { int s_socket; struct sockaddr_in s_data; - s_data.sin_family = AF_INET; - s_data.sin_addr.s_addr = INADDR_ANY; - s_data.sin_port = get_port(argv[1]); if (argc != 3) + { + std::cerr << "Fatal Error : invalid arguments :" << std::endl << "USAGE : ./ircserv "; return (1); - (void)argv; - + } + init_socket(s_data, s_socket, argv[1]); + write_info(s_data, s_socket); + while (1) + { + struct sockaddr_in c_addr; + socklen_t length = sizeof(c_addr); + if (accept(s_socket, (sockaddr *)&c_addr, &length) < 0) + { + std::cerr << "Connection error ?" << std::endl; + std::terminate(); + } + } + close(s_socket); return 0; }