From 6b1fd5a15bedd1ce97ad087fd33884d0dafab611 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Wed, 13 Jul 2022 17:31:18 +0200 Subject: [PATCH] wip with both my and luke code --- Makefile | 17 ++++----- srcs/Webserv.cpp | 93 +++++++++++++++++++++++------------------------ srcs/Webserv.hpp | 5 +++ srcs/main.cpp | 62 ++++++++++++++++++++----------- webserv | Bin 0 -> 133248 bytes 5 files changed, 99 insertions(+), 78 deletions(-) create mode 100755 webserv diff --git a/Makefile b/Makefile index f09c8cc..17f51b6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,3 @@ - NAME = webserv CXX = c++ @@ -6,19 +5,19 @@ CXX = c++ CXXFLAGS = -Wall -Wextra -Werror CXXFLAGS += -std=c++98 CXXFLAGS += -I$(HEADERS_D) -#CXXFLAGS += -g +CXXFLAGS += -g #CXXFLAGS += -O3 -SHELL = /bin/zsh +#SHELL = /bin/zsh VPATH = $(DIR_SRCS) -DIR_SRCS = tests +DIR_SRCS = srcs -HEADERS_D = ./templates -HEADERS = +HEADERS_D = ./srcs +HEADERS = Webserv.hpp DEPENDENCIES = $(HEADERS:%=$(HEADERS_D)/%) -SRCS = main.cpp +SRCS = main.cpp Webserv.cpp DIR_OBJS = builds OBJS = $(SRCS:%.cpp=$(DIR_OBJS)/%.o) @@ -29,7 +28,7 @@ OBJS = $(SRCS:%.cpp=$(DIR_OBJS)/%.o) all: $(NAME) -$(DIR_OBJS)/%.o: $(SRCS) | $(DIR_OBJS) +$(DIR_OBJS)/%.o: %.cpp | $(DIR_OBJS) $(CXX) $(CXXFLAGS) -c $< -o $@ $(DIR_OBJS): @@ -38,7 +37,7 @@ $(DIR_OBJS): $(OBJS): $(DEPENDENCIES) #$(OBJS): $(DEPENDENCIES) Makefile -$(NAME) : +$(NAME) : $(OBJS) $(CXX) $(OBJS) -o $(NAME) clean: diff --git a/srcs/Webserv.cpp b/srcs/Webserv.cpp index 884218a..a284a13 100644 --- a/srcs/Webserv.cpp +++ b/srcs/Webserv.cpp @@ -8,24 +8,20 @@ Webserv::Webserv() if (_socket_fd == -1) { ::perror("err socket(): "); - throw std::runtime_error("Socket init"); +// throw std::runtime_error("Socket init"); + throw WebservError(); } } -/* Webserv::Webserv(Webserv const &src) -{ - -} */ - Webserv::~Webserv() { std::cout << "Server destroyed\n"; } -/* Webserv & Webserv::operator=(Webserv const &rhs) -{ - -} */ +const char * Webserv::WebservError::what() const throw() { + return ("error"); +} + /////////////// // Functions // @@ -43,7 +39,7 @@ void Webserv::bind(in_port_t port) if (::bind(_socket_fd, (const sockaddr*)&addr, sizeof addr) == -1) { ::perror("err bind(): "); - throw std::runtime_error("Socket bind"); +// throw std::runtime_error("Socket bind"); } } @@ -52,7 +48,7 @@ void Webserv::listen(unsigned int max_connections) if (::listen(_socket_fd, max_connections) == -1) { ::perror("err listen(): "); - throw std::runtime_error("Socket listen"); +// throw std::runtime_error("Socket listen"); } } @@ -67,55 +63,56 @@ void Webserv::start() int accepted_fd; // poll (or equivalent) - struct pollfd poll_s; - poll_s.fd = _socket_fd; - poll_s.events = POLLIN; +// struct pollfd poll_s; +// poll_s.fd = _socket_fd; +// poll_s.events = POLLIN; - char buf[BUFSIZE]; // WIP buffer. need to try with std::vector or std::string. - int ret; +// char buf[BUFSIZE]; // WIP buffer. need to try with std::vector or std::string. +// int ret; std::cout << "Server started\n"; while (1) { - std::cout << "----------\n"; - std::cout << "poll()\n"; // poll (or equivalent) - ::poll(&poll_s, 1, -1); +// std::cout << "----------\n"; +// std::cout << "poll()\n"; // poll (or equivalent) +// ::poll(&poll_s, 1, -1); - std::cout << "accept()\n"; addr_len = sizeof addr; accepted_fd = ::accept(_socket_fd, (sockaddr*)&addr, &addr_len); if (accepted_fd == -1) { ::perror("err accept(): "); + //throw WebservError(); continue; } + std::cout << "accept()\n"; - // "Your server must never block and the client can be bounced properly if necessary". - // NO-Block OK, but how to handle it ? Miss the bouncing part. - ::fcntl(accepted_fd, F_SETFL, O_NONBLOCK); - - std::cout << "recv()\n"; - ret = ::recv(accepted_fd, buf, BUFSIZE, 0); - if (ret == -1) - { - ::perror("err recv(): "); - if (::send(accepted_fd, MSG_BOUNCE, sizeof MSG_BOUNCE - 1, 0) == -1) - ::perror("err send(): "); - ::close(accepted_fd); - continue; - } - /* - if (ret == BUFSIZE) - // send error like "request too long" to client - */ - buf[ret] = '\0'; - - std::cout << "send()\n"; - if (::send(accepted_fd, buf, ret, 0) == -1) // echo the read - ::perror("err send(): "); - if (::send(accepted_fd, MSG_TEST, sizeof MSG_TEST - 1, 0) == -1) - ::perror("err send(): "); - - ::close(accepted_fd); +// // "Your server must never block and the client can be bounced properly if necessary". +// // NO-Block OK, but how to handle it ? Miss the bouncing part. +// ::fcntl(accepted_fd, F_SETFL, O_NONBLOCK); +// +// std::cout << "recv()\n"; +// ret = ::recv(accepted_fd, buf, BUFSIZE, 0); +// if (ret == -1) +// { +// ::perror("err recv(): "); +// if (::send(accepted_fd, MSG_BOUNCE, sizeof MSG_BOUNCE - 1, 0) == -1) +// ::perror("err send(): "); +// ::close(accepted_fd); +// continue; +// } +// /* +// if (ret == BUFSIZE) +// // send error like "request too long" to client +// */ +// buf[ret] = '\0'; +// +// std::cout << "send()\n"; +// if (::send(accepted_fd, buf, ret, 0) == -1) // echo the read +// ::perror("err send(): "); +// if (::send(accepted_fd, MSG_TEST, sizeof MSG_TEST - 1, 0) == -1) +// ::perror("err send(): "); +// +// ::close(accepted_fd); } } diff --git a/srcs/Webserv.hpp b/srcs/Webserv.hpp index 01f87f1..d57511c 100644 --- a/srcs/Webserv.hpp +++ b/srcs/Webserv.hpp @@ -36,6 +36,11 @@ class Webserv std::map _request; std::map _response; + class WebservError : public std::exception { + const char * what() const throw(); + }; + }; #endif + diff --git a/srcs/main.cpp b/srcs/main.cpp index eecfa30..ae76e10 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include "Webserv.hpp" int main(void) { @@ -28,47 +28,56 @@ int main(void) /* wip hugo version + # include + # include + # include + # include // close + # include // fcntl -# include +# include // cout, cin # include // errno # include // perror +# include // memset # include // socket, accept, listen, send, recv, bind, connect, setsockopt, getsockname # include // sockaddr_in +# include // inet_ntoa, inet_addr, htonl, htons, ntohl, ntohs +# include // poll -# define INVALID_SCKT -1 -# define INVALID_BIND -1 -# define INVALID_LSTN -1 -# define INVALID_AXPT -1 +# define INVALID -1 # define PORT 80 -# define NB_CONX 20 +# define BACKLOG 20 int main() { struct sockaddr_in my_addr; struct sockaddr_in their_addr; - int socket_fd; - int new_fd; + int sckt_fd; + int axpt_fd; int lstn; + socklen_t addr_len; - socket_fd = socket(AF_INET, SOCK_STREAM, 0); - if (socket_fd == INVALID_SCKT) + // INIT SOCKET + sckt_fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); + if (sckt_fd == INVALID) { perror("err socket(): "); return 0; } + std::cout << "server init\n"; + // BIND IT memset(&my_addr, 0, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(PORT); my_addr.sin_addr.s_addr = htonl(INADDR_ANY); // my_addr.sin_addr.s_addr = inet_addr("10.12.110.57"); - - bind(socket_fd, (struct sockaddr *)&my_addr, sizeof(my_addr)); - if (socket_fd == INVALID_BIND) + bind(sckt_fd, (struct sockaddr *)&my_addr, sizeof(my_addr)); + if (sckt_fd == INVALID) { perror("err bind(): "); return 0; } + std::cout << "socket bind to port: " << PORT << "\n"; // https://beej.us/guide/bgnet/html/index-wide.html#cb29 : // // Sometimes, you might notice, you try to rerun a server and bind() fails, claiming “Address already in use.” What does that mean? Well, a little bit of a socket that was connected is still hanging around in the kernel, and it’s hogging the port. You can either wait for it to clear (a minute or so), or add code to your program allowing it to reuse the port, like this: @@ -81,20 +90,31 @@ int main() // exit(1); // } - lstn = listen(socket_fd, NB_CONX); - if (lstn == INVALID_LSTN) + // LISTEN ON IT + lstn = listen(sckt_fd, BACKLOG); + if (lstn == INVALID) { perror("err listen(): "); return 0; } + std::cout << "server listening\n"; - new_fd = accept(socket_fd, &their_addr, sizeof(their_addr)); - if (new_fd == INVALID_AXPT) + // ACCEPT INCOMING CONNECT + while (1) { - perror("err accept(): "); - return 0; - } + addr_len = sizeof(their_addr); + axpt_fd = accept(sckt_fd, (sockaddr*)&their_addr, &addr_len); + if (axpt_fd == INVALID) + { + perror("err accept(): "); + continue; + } + std::cout << "server accepted a socket from: " + << inet_ntoa(their_addr.sin_addr) + << "\n"; + break; + } return 0; } diff --git a/webserv b/webserv new file mode 100755 index 0000000000000000000000000000000000000000..7d8cc3e847165cf5475818f7df489a633764c177 GIT binary patch literal 133248 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