initial commit
This commit is contained in:
55
Makefile
Normal file
55
Makefile
Normal 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
|
||||||
@@ -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
objs/srcs/main.o
Normal file
BIN
objs/srcs/main.o
Normal file
Binary file not shown.
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user