diff --git a/srcs/Webserv.cpp b/srcs/Webserv.cpp index a284a13..ba7fd54 100644 --- a/srcs/Webserv.cpp +++ b/srcs/Webserv.cpp @@ -8,8 +8,7 @@ Webserv::Webserv() if (_socket_fd == -1) { ::perror("err socket(): "); -// throw std::runtime_error("Socket init"); - throw WebservError(); + throw std::runtime_error("Socket init"); } } @@ -18,10 +17,6 @@ Webserv::~Webserv() std::cout << "Server destroyed\n"; } -const char * Webserv::WebservError::what() const throw() { - return ("error"); -} - /////////////// // Functions // @@ -39,7 +34,8 @@ 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"); +// std::cerr << "error bind\n"; } } @@ -48,7 +44,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"); } } @@ -63,19 +59,19 @@ 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); addr_len = sizeof addr; accepted_fd = ::accept(_socket_fd, (sockaddr*)&addr, &addr_len); @@ -87,32 +83,32 @@ void Webserv::start() } 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 d57511c..70b54a3 100644 --- a/srcs/Webserv.hpp +++ b/srcs/Webserv.hpp @@ -36,10 +36,6 @@ 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 ae76e10..31bd27f 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -14,7 +14,8 @@ int main(void) { Webserv serv; - serv.bind(80); + // https://security.stackexchange.com/questions/169213/how-to-chose-a-port-to-run-an-application-on-localhost + serv.bind(8080); serv.listen(512); // 512 max connections arbitrary serv.start(); } @@ -44,7 +45,7 @@ int main(void) # include // poll # define INVALID -1 -# define PORT 80 +# define PORT 1025 # define BACKLOG 20 int main() diff --git a/webserv b/webserv index 7d8cc3e..8df53b3 100755 Binary files a/webserv and b/webserv differ