initial commit

This commit is contained in:
2023-11-29 16:44:03 +01:00
parent ba26a2e64b
commit 66075b05a0
5 changed files with 112 additions and 8 deletions

55
Makefile Normal file
View File

@@ -0,0 +1,55 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: vvaas <vvaas@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# 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

View File

@@ -6,7 +6,7 @@
/* By: vvaas <vvaas@student.42.fr> +#+ +:+ +#+ */ /* By: vvaas <vvaas@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/29 13:24:01 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 <string> # include <string>
# include <sys/socket.h> # include <sys/socket.h>
# include <netinet/in.h> # include <netinet/in.h>
# include <unistd.h>
# include <cstdlib>
# include <sys/socket.h>
#endif #endif

BIN
ircserv Executable file

Binary file not shown.

BIN
objs/srcs/main.o Normal file

Binary file not shown.

View File

@@ -6,7 +6,7 @@
/* By: vvaas <vvaas@student.42.fr> +#+ +:+ +#+ */ /* By: vvaas <vvaas@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/24 10:40:01 by maldavid #+# #+# */ /* 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) if (!port)
return (0); 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 main(int argc, char** argv)
{ {
int s_socket; int s_socket;
struct sockaddr_in s_data; 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) if (argc != 3)
{
std::cerr << "Fatal Error : invalid arguments :" << std::endl << "USAGE : ./ircserv <port> <password>";
return (1); 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; return 0;
} }