From e0a756399a59253ecc926dff37972247d652b954 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Thu, 15 Feb 2024 20:44:46 +0900 Subject: [PATCH 01/14] =?UTF-8?q?connection=20class=20=E9=9B=9B=E5=BD=A2?= =?UTF-8?q?=20=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.hpp | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 srcs/Server/Connection.hpp diff --git a/srcs/Server/Connection.hpp b/srcs/Server/Connection.hpp new file mode 100644 index 0000000..4b546a9 --- /dev/null +++ b/srcs/Server/Connection.hpp @@ -0,0 +1,57 @@ +#ifndef CONNECTION_HPP +#define CONNECTION_HPP + +enum eSelectType +{ + READ, + WRITE +}; + +/* +input: イベント(isSet) +calculate: イベント処理 +output: 監視対象のファイルディスクリプタとイベントタイプ + +イベント処理 +if read + if cgiFd + cgiFdを読み込む + else + clientFdを読み込む +else if write + if cgiFd + cgiFdを書き込む + else + clientFdを書き込む +else + エラー +*/ + +struct sSelectRequest +{ + int fd; + eSelectType type; +}; + +class Connection +{ +private: + int clientFd; + int cgiFd; + +public: + Connection(); + ~Connection(); + sSelectRequest handleEvent(bool isSet); +}; + +Connection::Connection(/* args */) +{ +} + +Connection::~Connection() +{ +} + + +#endif From 1d319ea43fcedf05fc95719188a23be0aeda8cea Mon Sep 17 00:00:00 2001 From: kotto5 Date: Thu, 15 Feb 2024 21:24:55 +0900 Subject: [PATCH 02/14] =?UTF-8?q?accept=20=E3=81=97=E3=81=9F=E3=82=89=20Co?= =?UTF-8?q?nnection=20=E3=82=92Server=20=E3=81=AB=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 25 +++++++++++++++++++++++++ srcs/Server/Connection.hpp | 32 ++++++++++++++------------------ srcs/Server/Server.cpp | 5 +++++ srcs/Server/Server.hpp | 2 ++ 4 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 srcs/Server/Connection.cpp diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp new file mode 100644 index 0000000..046a156 --- /dev/null +++ b/srcs/Server/Connection.cpp @@ -0,0 +1,25 @@ +#include "Connection.hpp" + +Connection::Connection(ClSocket *sock): client(sock), cgiFd(-1) +{ +} + +Connection::~Connection() +{ +} + + +sSelectRequest Connection::createRequest(int fd, eSelectType type) +{ + return type * MAX_SOCKETS + fd; +} + +int Connection::getFd(sSelectRequest r) +{ + return r % MAX_SOCKETS; +} + +eSelectType Connection::getType(sSelectRequest r) +{ + return (eSelectType)(r / MAX_SOCKETS); +} \ No newline at end of file diff --git a/srcs/Server/Connection.hpp b/srcs/Server/Connection.hpp index 4b546a9..66743bc 100644 --- a/srcs/Server/Connection.hpp +++ b/srcs/Server/Connection.hpp @@ -1,12 +1,18 @@ #ifndef CONNECTION_HPP #define CONNECTION_HPP +#include "Socket.hpp" + +typedef int sSelectRequest; + enum eSelectType { READ, - WRITE + WRITE, }; +#define MAX_SOCKETS 1024 + /* input: イベント(isSet) calculate: イベント処理 @@ -27,31 +33,21 @@ else エラー */ -struct sSelectRequest -{ - int fd; - eSelectType type; -}; class Connection { private: - int clientFd; + ClSocket *client; int cgiFd; public: - Connection(); + Connection(ClSocket *sock); ~Connection(); - sSelectRequest handleEvent(bool isSet); -}; - -Connection::Connection(/* args */) -{ -} - -Connection::~Connection() -{ -} + sSelectRequest handleEvent(); + static int getFd(sSelectRequest req); + static eSelectType getType(sSelectRequest req); + static sSelectRequest createRequest(int fd, eSelectType type); +}; #endif diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 3cdb9d7..408d2df 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -230,6 +230,11 @@ int Server::accept(Socket *serverSock) ClSocket *newClSock = svSock->dequeueSocket(); if (newClSock == NULL) return (0); + + Connection *newConnection = new Connection(newClSock); + sSelectRequest req = Connection::createRequest(newClSock->getFd(), READ); + _connections[req] = newConnection; + if (addMapAndSockList(newClSock, new Request(newClSock), E_RECV)) { socketDeleter(newClSock); diff --git a/srcs/Server/Server.hpp b/srcs/Server/Server.hpp index 4ea2989..1d53853 100644 --- a/srcs/Server/Server.hpp +++ b/srcs/Server/Server.hpp @@ -19,6 +19,7 @@ #include "Socket.hpp" #include "HttpMessage.hpp" #include "Response.hpp" +#include "Connection.hpp" #define BUFFER_LEN 10000 #define MAX_SOCKETS 1024 @@ -52,6 +53,7 @@ class Server timeval timeout; std::size_t _limitClientMsgSize; int _socketCount; + std::map _connections; Socket *getHandleSock(Socket *sock, HttpMessage *recvdMessage, HttpMessage *toSendMessage); int handleSockets(fd_set *read_fds, fd_set *write_fds, int activity); From b24e381f83d45b86b033550987815bab82d8d630 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Thu, 15 Feb 2024 22:00:23 +0900 Subject: [PATCH 03/14] [refactor] waste code --- srcs/Server/Server.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 408d2df..7180354 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -20,12 +20,6 @@ Server::Server() { } Server::~Server() { - // std::map::iterator itr1; - // for (itr1 = Recvs.begin(); itr1 != Recvs.end(); itr1++) - // delete (itr1->second); - // for (itr1 = Sends.begin(); itr1 != Sends.end(); itr1++) - // delete (itr1->second); - std::list::iterator itr2; for (itr2 = server_sockets.begin(); itr2 != server_sockets.end();) { From 08f5dca2f22230ef904644ec539d2116eacb07c3 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 07:43:27 +0900 Subject: [PATCH 04/14] =?UTF-8?q?connection=20=E3=81=AE=E5=91=BC=E3=81=B3?= =?UTF-8?q?=E5=87=BA=E3=81=97=E3=81=AE=E9=9B=9B=E5=BD=A2=E3=82=92=E4=BD=9C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 37 +++++++++++++++++++++++++++++++++++++ srcs/Server/Connection.hpp | 7 ++++--- srcs/Server/Server.cpp | 12 ++++++++++++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index 046a156..fc2313a 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -8,6 +8,43 @@ Connection::~Connection() { } +sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) +{ + if (getFd(req) != client->getFd()) + return -1; + else if (!isSet) + { + if (client->isTimeout()) + { + // タイムアウト処理 + return -1; + } + else + return req; + } + else if (getType(req) == READ) + { + if (getFd(req) == client->getFd()) + { + ssize_t ret = clientRead(client, recvMessage); + if (ClientConnectionErr(ret, client)) + { + delete recvMessage; + delete client; + return -1; + } + else if (ret <= 0 || + (isClient(client) && (recvMessage->isCompleted() || recvMessage->isInvalid()))) + { + // createResponse + } + } + } + else if (getType(req) == WRITE) + { + } + return 1; +} sSelectRequest Connection::createRequest(int fd, eSelectType type) { diff --git a/srcs/Server/Connection.hpp b/srcs/Server/Connection.hpp index 66743bc..71def9e 100644 --- a/srcs/Server/Connection.hpp +++ b/srcs/Server/Connection.hpp @@ -2,6 +2,7 @@ #define CONNECTION_HPP #include "Socket.hpp" +#include "HttpMessage.hpp" typedef int sSelectRequest; @@ -37,13 +38,13 @@ else class Connection { private: - ClSocket *client; - int cgiFd; + ClSocket *client; + HttpMessage *recvMessage; public: Connection(ClSocket *sock); ~Connection(); - sSelectRequest handleEvent(); + sSelectRequest handleEvent(sSelectRequest req, bool isSet); static int getFd(sSelectRequest req); static eSelectType getType(sSelectRequest req); diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 7180354..0a4e3ad 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -166,6 +166,18 @@ int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) --activity; } } + std::map::iterator itr2; + for (itr2 = _connections.begin(); activity && itr2 != _connections.end();) + { + Connection *connection = itr2->second; + const int fd = Connection::getFd(itr2->first); + const sSelectRequest req = connection->handleEvent(itr2->first, FD_ISSET(fd, read_fds)); + FD_CLR(fd, read_fds); + _connections.erase(itr2++); + if (req != -1) + _connections[req] = connection; + } + // クライアントソケット受信 for (itr = recv_sockets.begin(); itr != recv_sockets.end();) { From bca24d6cb6d59ba60e1fc655b4d664c5677c2122 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 07:46:40 +0900 Subject: [PATCH 05/14] =?UTF-8?q?recv=20=E3=81=AE=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=82=92=20server=20=E3=81=8B=E3=82=89=20connection=20?= =?UTF-8?q?=E3=81=AB=E7=A7=BB=E8=AD=B2=20(=20response=20=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E3=81=AF=E6=9C=AA=E9=81=94=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 43 +++++++++++++++++++++++++++++++++++++- srcs/Server/Server.cpp | 34 ------------------------------ 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index fc2313a..5c5b71a 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -1,13 +1,52 @@ #include "Connection.hpp" +#include "Request.hpp" +#include "Server.hpp" -Connection::Connection(ClSocket *sock): client(sock), cgiFd(-1) +Connection::Connection(ClSocket *sock) { + client = sock; + recvMessage = new Request(sock); } Connection::~Connection() { } +#define MSG_LIMIT 10000000000 + +ssize_t clientRead(ClSocket *client, HttpMessage *m) +{ + ssize_t recv_ret; + + static char buffer[BUFFER_LEN]; + client->updateLastAccess(); + recv_ret = ::recv(client->getFd(), buffer, BUFFER_LEN, 0); + if (recv_ret == -1) + { + perror("recv::: "); + return (-1); + } + try { + m->parsing(std::string(buffer, (std::size_t)recv_ret), MSG_LIMIT); + return (recv_ret); + } + catch (const std::exception &e) { + return (-1); + } +} + +bool ClientConnectionErr(ssize_t ret, Socket *sock) +{ + if (ret > 0) + return (false); + return (ret == -1 && dynamic_cast(sock)); +} + +bool isClient(Socket *sock) +{ + return (dynamic_cast(sock) != NULL); +} + sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) { if (getFd(req) != client->getFd()) @@ -37,6 +76,8 @@ sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) (isClient(client) && (recvMessage->isCompleted() || recvMessage->isInvalid()))) { // createResponse + // setNewSendMessage(sock, Recvs[sock]); + // deleteMapAndSockList(sockNode, E_RECV); } } } diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 0a4e3ad..41782ba 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -103,24 +103,12 @@ int Server::createServerSocket(int port) throw() return (0); } -bool ClientConnectionErr(ssize_t ret, Socket *sock) -{ - if (ret > 0) - return (false); - return (ret == -1 && dynamic_cast(sock)); -} - bool ClientClosedConnection(ssize_t ret, Socket *sock) { return (ret == 0 && dynamic_cast(sock) && shutdown(sock->getFd(), SHUT_RD) == -1 && errno == ENOTCONN); } -bool isClient(Socket *sock) -{ - return (dynamic_cast(sock) != NULL); -} - int Server::setCgiErrorResponse(CgiSocket *cgiSock, bool timeout) { if (timeout && cgiSock->killCgi()) @@ -178,28 +166,6 @@ int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) _connections[req] = connection; } - // クライアントソケット受信 - for (itr = recv_sockets.begin(); itr != recv_sockets.end();) - { - sockNode = itr++; - sock = *sockNode; - if (FD_ISSET(sock->getFd(), read_fds) == false) - { - if (sock->isTimeout()) - handleConnectionErr(E_RECV, sockNode, true); - continue ; - } - --activity; - ssize_t ret = recv(sock, Recvs[sock]); - if (ClientConnectionErr(ret, sock)) - handleConnectionErr(E_RECV, sockNode, false); - else if (ret <= 0 || - (isClient(sock) && (Recvs[sock]->isCompleted() || Recvs[sock]->isInvalid()))) - { - setNewSendMessage(sock, Recvs[sock]); - deleteMapAndSockList(sockNode, E_RECV); - } - } // クライアントソケット送信 for (itr = send_sockets.begin(); itr != send_sockets.end();) { From 4a1886b4c1e87c0bc4d98724d4a26ae253fce69b Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 07:54:12 +0900 Subject: [PATCH 06/14] =?UTF-8?q?setNewMessage=20(response=20=E4=BD=9C?= =?UTF-8?q?=E6=88=90)=20=E3=82=92=20server=20=E3=81=8B=E3=82=89=20connecti?= =?UTF-8?q?on=20=E3=81=AB=E7=A7=BB=E8=AD=B2=20=E3=81=BE=E3=81=A0=E3=80=81?= =?UTF-8?q?=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 28 +++++++++++++++++++++++++++- srcs/Server/Server.cpp | 26 -------------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index 5c5b71a..7c16385 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -1,6 +1,7 @@ #include "Connection.hpp" #include "Request.hpp" #include "Server.hpp" +#include "Router.hpp" Connection::Connection(ClSocket *sock) { @@ -47,6 +48,31 @@ bool isClient(Socket *sock) return (dynamic_cast(sock) != NULL); } +int setNewSendMessage(Socket *sock, HttpMessage *message) +{ + #ifdef TEST + std::cout << "setNewSendMessage [" << message->getRaw() << "]" << std::endl; + #endif + + Router router; + // ルーティング + HttpMessage *newMessage = router.routeHandler(*message, sock); + if (newMessage == NULL) + return (1); + Socket *handleSock = getHandleSock(sock, message, newMessage); + if (handleSock == NULL) + { + delete (newMessage); + return (1); + } + // if (addMapAndSockList(handleSock, newMessage, E_SEND)) + // { + // socketDeleter(handleSock); + // return (1); + // } + return (0); +} + sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) { if (getFd(req) != client->getFd()) @@ -76,7 +102,7 @@ sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) (isClient(client) && (recvMessage->isCompleted() || recvMessage->isInvalid()))) { // createResponse - // setNewSendMessage(sock, Recvs[sock]); + setNewSendMessage(client, recvMessage); // deleteMapAndSockList(sockNode, E_RECV); } } diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 41782ba..486456a 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -272,32 +272,6 @@ Socket *Server::getHandleSock(Socket *sock, HttpMessage *recvdMessage, HttpMessa return (clSock); // to client } -// bool じゃなくて dynamic_cast で判定したほうがいいかも -int Server::setNewSendMessage(Socket *sock, HttpMessage *message) -{ - #ifdef TEST - std::cout << "setNewSendMessage [" << message->getRaw() << "]" << std::endl; - #endif - - Router router; - // ルーティング - HttpMessage *newMessage = router.routeHandler(*message, sock); - if (newMessage == NULL) - return (1); - Socket *handleSock = getHandleSock(sock, message, newMessage); - if (handleSock == NULL) - { - delete (newMessage); - return (1); - } - if (addMapAndSockList(handleSock, newMessage, E_SEND)) - { - socketDeleter(handleSock); - return (1); - } - return (0); -} - int Server::finishSend(Socket *sock) { if (CgiSocket *cgiSock = dynamic_cast(sock)) From eb44041ae0ba9be09a93929c39e043069fdb3894 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 07:59:55 +0900 Subject: [PATCH 07/14] =?UTF-8?q?setNewSendMessage=20=E4=BD=9C=E6=88=90=20?= =?UTF-8?q?getHandleSock=20=E3=81=8C=E3=81=BE=E3=81=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 11 +++-------- srcs/Server/Connection.hpp | 9 +++++++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index 7c16385..d031092 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -58,19 +58,14 @@ int setNewSendMessage(Socket *sock, HttpMessage *message) // ルーティング HttpMessage *newMessage = router.routeHandler(*message, sock); if (newMessage == NULL) - return (1); + return (sConnection(NULL, NULL, ERROR)); Socket *handleSock = getHandleSock(sock, message, newMessage); if (handleSock == NULL) { delete (newMessage); - return (1); + return (sConnection(NULL, NULL, ERROR)); } - // if (addMapAndSockList(handleSock, newMessage, E_SEND)) - // { - // socketDeleter(handleSock); - // return (1); - // } - return (0); + return (sConnection(handleSock, newMessage, WRITE)); } sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) diff --git a/srcs/Server/Connection.hpp b/srcs/Server/Connection.hpp index 71def9e..7c19bfb 100644 --- a/srcs/Server/Connection.hpp +++ b/srcs/Server/Connection.hpp @@ -10,6 +10,15 @@ enum eSelectType { READ, WRITE, + ERROR, +}; + +struct sConnection { + sConnection(Socket *sock, HttpMessage *message, eSelectType type): sock(sock), message(message), type(type) {} + + Socket *sock; + HttpMessage *message; + eSelectType type; }; #define MAX_SOCKETS 1024 From 2c920810de58223ad215b750ab6fa8cee036edf8 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 08:09:34 +0900 Subject: [PATCH 08/14] =?UTF-8?q?recv=20->=20response=20=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E3=81=BE=E3=81=A7=E7=B5=82=E3=82=8F=E3=81=A3=E3=81=9F=E3=80=82?= =?UTF-8?q?=20server=20=E3=81=8C=E3=81=9D=E3=81=AEevent=20=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B=E3=81=A8=E3=81=93=E3=82=8D?= =?UTF-8?q?=E3=81=BE=E3=81=A0=E3=80=82write=20=E3=81=BE=E3=81=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 34 +++++++++++++++++++++++++++++++--- srcs/Server/Connection.hpp | 1 + srcs/Server/Server.cpp | 21 --------------------- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index d031092..3c1c0b0 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -2,6 +2,7 @@ #include "Request.hpp" #include "Server.hpp" #include "Router.hpp" +#include "CgiSocketFactory.hpp" Connection::Connection(ClSocket *sock) { @@ -48,7 +49,23 @@ bool isClient(Socket *sock) return (dynamic_cast(sock) != NULL); } -int setNewSendMessage(Socket *sock, HttpMessage *message) +Socket *getHandleSock(Socket *sock, HttpMessage *recvdMessage, HttpMessage *toSendMessage) +{ + ClSocket *clSock = NULL; + if (CgiSocket *cgiSock = dynamic_cast(sock)) // from cgi + { + clSock = cgiSock->moveClSocket(); + delete (sock); + } + else + clSock = dynamic_cast(sock); // from client + if (dynamic_cast(toSendMessage)) + return CgiSocketFactory::create(*recvdMessage, clSock); // to cgi + else + return (clSock); // to client +} + +sConnection setNewSendMessage(Socket *sock, HttpMessage *message) { #ifdef TEST std::cout << "setNewSendMessage [" << message->getRaw() << "]" << std::endl; @@ -97,8 +114,19 @@ sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) (isClient(client) && (recvMessage->isCompleted() || recvMessage->isInvalid()))) { // createResponse - setNewSendMessage(client, recvMessage); - // deleteMapAndSockList(sockNode, E_RECV); + sConnection newMessage = setNewSendMessage(client, recvMessage); + delete recvMessage; + if (newMessage.type == ERROR) + { + delete client; + return -1; + } + else + { + client = dynamic_cast(newMessage.sock); + sendMessage = newMessage.message; + return createRequest(client->getFd(), newMessage.type); + } } } } diff --git a/srcs/Server/Connection.hpp b/srcs/Server/Connection.hpp index 7c19bfb..88e9f37 100644 --- a/srcs/Server/Connection.hpp +++ b/srcs/Server/Connection.hpp @@ -49,6 +49,7 @@ class Connection private: ClSocket *client; HttpMessage *recvMessage; + HttpMessage *sendMessage; public: Connection(ClSocket *sock); diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 486456a..6eb00c9 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -251,27 +251,6 @@ ssize_t Server::send(Socket *sock, HttpMessage *message) return (ret); } -Socket *Server::getHandleSock(Socket *sock, HttpMessage *recvdMessage, HttpMessage *toSendMessage) -{ - ClSocket *clSock = NULL; - if (CgiSocket *cgiSock = dynamic_cast(sock)) // from cgi - { - clSock = cgiSock->moveClSocket(); - socketDeleter(cgiSock); - } - else - clSock = dynamic_cast(sock); // from client - if (dynamic_cast(toSendMessage)) - { - CgiSocket *newCgiSock; - if ((newCgiSock = CgiSocketFactory::create(*recvdMessage, clSock))) // to cgi - _socketCount++; - return (newCgiSock); - } - else - return (clSock); // to client -} - int Server::finishSend(Socket *sock) { if (CgiSocket *cgiSock = dynamic_cast(sock)) From 2bec9d6322f6e7e74c70ffdb07ca407a15bf982e Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 08:16:52 +0900 Subject: [PATCH 09/14] =?UTF-8?q?write=20=E9=9B=9B=E5=BD=A2=E3=82=92=20ser?= =?UTF-8?q?ver=20->=20connection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 16 ++++++++++++++++ srcs/Server/Server.cpp | 26 -------------------------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index 3c1c0b0..12cebce 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -132,6 +132,22 @@ sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) } else if (getType(req) == WRITE) { + // bool isCgi = getFd(req) != cgiFd; + // cgi はまだ実装していない + bool isCgi = false; + + ssize_t ret = send(client, sendMessage, isCgi); + if (isCgi == false && ret == -1) + { + delete sendMessage; + delete client; + return -1; + } + else if (sendMessage->doesSendEnd() || ret == -1) + { + finishSend(client); + delete sendMessage; + } } return 1; } diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 6eb00c9..c696aba 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -165,32 +165,6 @@ int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) if (req != -1) _connections[req] = connection; } - - // クライアントソケット送信 - for (itr = send_sockets.begin(); itr != send_sockets.end();) - { - sockNode = itr++; - sock = *sockNode; - if (FD_ISSET(sock->getFd(), write_fds) == false) - { - if (sock->isTimeout()) - handleConnectionErr(E_SEND, sockNode, true); - continue ; - } - --activity; - bool isCgi = (dynamic_cast(sock) != NULL); - ssize_t ret = send(sock, Sends[sock]); - if (isCgi == false && ret == -1) - { - deleteMapAndSockList(sockNode, E_SEND); - socketDeleter(sock); - } - else if (Sends[sock]->doesSendEnd() || ret == -1) - { - finishSend(sock); - deleteMapAndSockList(sockNode, E_SEND); - } - } return (0); } From 1cfbd8702eb09cc68430e3d02b90ff893488187f Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 08:25:17 +0900 Subject: [PATCH 10/14] =?UTF-8?q?write=20=E5=AE=9F=E8=A3=85=20=E7=A7=BB?= =?UTF-8?q?=E8=AD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 42 +++++++++++++++++++++++++++++++++++++- srcs/Server/Server.cpp | 38 ---------------------------------- 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index 12cebce..c4e4975 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -85,6 +85,46 @@ sConnection setNewSendMessage(Socket *sock, HttpMessage *message) return (sConnection(handleSock, newMessage, WRITE)); } +ssize_t clientWrite(Socket *sock, HttpMessage *message) +{ + ssize_t ret; + const uint8_t *buffer; + + sock->updateLastAccess(); + buffer = message->getSendBuffer(); + if (buffer == NULL) + return (-1); + ret = ::send(sock->getFd(), buffer, message->getContentLengthRemain(), 0); + if (ret >= 0) // 0 も含んでるのはcgiのために超大事 + message->addSendPos(ret); + return (ret); +} + +sConnection finishSend(Socket *sock) +{ + if (CgiSocket *cgiSock = dynamic_cast(sock)) + { + (void)cgiSock; + // if ((shutdown(sock->getFd(), SHUT_WR) == -1 && errno != ENOTCONN) + // || addMapAndSockList(sock, new(std::nothrow) CgiResponse(), E_RECV)) + // { + // perror("shutdown: "); + // setCgiErrorResponse(cgiSock, false); + // socketDeleter(cgiSock); + // return (1); + // } + return (sConnection(NULL, NULL, ERROR)); + } + else + { + ClSocket *clSock = dynamic_cast(sock); + if (clSock->getMaxRequest() == 0) + return (sConnection(NULL, NULL, ERROR)); + else + return (sConnection(clSock, new Request(clSock), READ)); + } +} + sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) { if (getFd(req) != client->getFd()) @@ -136,7 +176,7 @@ sSelectRequest Connection::handleEvent(sSelectRequest req, bool isSet) // cgi はまだ実装していない bool isCgi = false; - ssize_t ret = send(client, sendMessage, isCgi); + ssize_t ret = clientWrite(client, sendMessage); if (isCgi == false && ret == -1) { delete sendMessage; diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index c696aba..568af37 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -210,44 +210,6 @@ int Server::recv(Socket *sock, HttpMessage *message) { } } -ssize_t Server::send(Socket *sock, HttpMessage *message) -{ - ssize_t ret; - const uint8_t *buffer; - - sock->updateLastAccess(); - buffer = message->getSendBuffer(); - if (buffer == NULL) - return (-1); - ret = ::send(sock->getFd(), buffer, message->getContentLengthRemain(), 0); - if (ret >= 0) // 0 も含んでるのはcgiのために超大事 - message->addSendPos(ret); - return (ret); -} - -int Server::finishSend(Socket *sock) -{ - if (CgiSocket *cgiSock = dynamic_cast(sock)) - { - if ((shutdown(sock->getFd(), SHUT_WR) == -1 && errno != ENOTCONN) - || addMapAndSockList(sock, new(std::nothrow) CgiResponse(), E_RECV)) - { - perror("shutdown: "); - setCgiErrorResponse(cgiSock, false); - socketDeleter(cgiSock); - return (1); - } - } - else if (ClSocket *clSock = dynamic_cast(sock)) - { - if (clSock->getMaxRequest() == 0) - socketDeleter(clSock); - else if (addMapAndSockList(sock, new Request((ClSocket *)sock), E_RECV)) - socketDeleter(clSock); - } - return (0); -} - /** * @brief 指定したソケットを監視対象に追加する * From 2e2adc5ab519dad4ab35a2fe9dbdc069569c21c1 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 08:52:49 +0900 Subject: [PATCH 11/14] =?UTF-8?q?Http=E9=80=9A=E4=BF=A1=E3=81=AF=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Connection.cpp | 5 +++ srcs/Server/Connection.hpp | 1 + srcs/Server/Server.cpp | 73 +++++++++++++++----------------------- srcs/Server/Server.hpp | 2 +- 4 files changed, 36 insertions(+), 45 deletions(-) diff --git a/srcs/Server/Connection.cpp b/srcs/Server/Connection.cpp index c4e4975..43478df 100644 --- a/srcs/Server/Connection.cpp +++ b/srcs/Server/Connection.cpp @@ -205,4 +205,9 @@ int Connection::getFd(sSelectRequest r) eSelectType Connection::getType(sSelectRequest r) { return (eSelectType)(r / MAX_SOCKETS); +} + +int Connection::getFd() const +{ + return client->getFd(); } \ No newline at end of file diff --git a/srcs/Server/Connection.hpp b/srcs/Server/Connection.hpp index 88e9f37..0feffbd 100644 --- a/srcs/Server/Connection.hpp +++ b/srcs/Server/Connection.hpp @@ -55,6 +55,7 @@ class Connection Connection(ClSocket *sock); ~Connection(); sSelectRequest handleEvent(sSelectRequest req, bool isSet); + int getFd() const; static int getFd(sSelectRequest req); static eSelectType getType(sSelectRequest req); diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 568af37..d6939df 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -72,10 +72,19 @@ int Server::run() fd_set write_fds; FD_ZERO(&read_fds); FD_ZERO(&write_fds); + std::map::iterator itr; Server::set_fd_set(read_fds, server_sockets, max_fd); - Server::set_fd_set(read_fds, recv_sockets, max_fd); - Server::set_fd_set(write_fds, send_sockets, max_fd); - + for (itr = _connections.begin(); itr != _connections.end(); itr++) + { + const int fd = Connection::getFd(itr->first); + const eSelectType type = Connection::getType(itr->first); + if (type == READ) + FD_SET(fd, &read_fds); + else + FD_SET(fd, &write_fds); + if (fd > max_fd) + max_fd = fd; + } int activity = select(max_fd + 1, &read_fds, &write_fds, NULL, &timeout); if (activity == -1 && errno != EINTR) throw ServerException("select"); @@ -141,6 +150,7 @@ int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) std::list::iterator itr; std::list::iterator sockNode; Socket *sock; + std::map newConnections; // サーバーソケット受信 @@ -150,7 +160,10 @@ int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) sock = *sockNode; if (FD_ISSET(((sock)->getFd()), read_fds)) { - accept(sock); + Connection *newConnection = accept(sock); + sSelectRequest req = Connection::createRequest(newConnection->getFd(), READ); + newConnections[req] = newConnection; + _socketCount++; --activity; } } @@ -158,56 +171,28 @@ int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) for (itr2 = _connections.begin(); activity && itr2 != _connections.end();) { Connection *connection = itr2->second; - const int fd = Connection::getFd(itr2->first); - const sSelectRequest req = connection->handleEvent(itr2->first, FD_ISSET(fd, read_fds)); - FD_CLR(fd, read_fds); - _connections.erase(itr2++); + const sSelectRequest r = itr2->first; + const int fd = Connection::getFd(r); + const bool fdIsSet = Connection::getType(r) == READ ? FD_ISSET(fd, read_fds) : FD_ISSET(fd, write_fds); + + const sSelectRequest req = connection->handleEvent(r, fdIsSet); if (req != -1) - _connections[req] = connection; + newConnections[req] = connection; + itr2++; } + _connections = newConnections; return (0); } -int Server::accept(Socket *serverSock) +Connection *Server::accept(Socket *serverSock) { if (_socketCount >= MAX_SOCKETS) - return (0); + return (NULL); SvSocket *svSock = dynamic_cast(serverSock); ClSocket *newClSock = svSock->dequeueSocket(); if (newClSock == NULL) - return (0); - - Connection *newConnection = new Connection(newClSock); - sSelectRequest req = Connection::createRequest(newClSock->getFd(), READ); - _connections[req] = newConnection; - - if (addMapAndSockList(newClSock, new Request(newClSock), E_RECV)) - { - socketDeleter(newClSock); - return (1); - } - _socketCount++; - return (0); -} - -int Server::recv(Socket *sock, HttpMessage *message) { - ssize_t recv_ret; - - static char buffer[BUFFER_LEN]; - sock->updateLastAccess(); - recv_ret = ::recv(sock->getFd(), buffer, BUFFER_LEN, 0); - if (recv_ret == -1) - { - perror("recv::: "); - return (-1); - } - try { - message->parsing(std::string(buffer, (std::size_t)recv_ret), _limitClientMsgSize); - return (recv_ret); - } - catch (const std::exception &e) { - return (-1); - } + return (NULL); + return (new Connection(newClSock)); } /** diff --git a/srcs/Server/Server.hpp b/srcs/Server/Server.hpp index 1d53853..32c4a97 100644 --- a/srcs/Server/Server.hpp +++ b/srcs/Server/Server.hpp @@ -57,7 +57,7 @@ class Server Socket *getHandleSock(Socket *sock, HttpMessage *recvdMessage, HttpMessage *toSendMessage); int handleSockets(fd_set *read_fds, fd_set *write_fds, int activity); - int accept(Socket *serverSocket); + Connection *accept(Socket *serverSock); int recv(Socket *sock, HttpMessage *message); ssize_t send(Socket *sock, HttpMessage *message); int setNewSendMessage(Socket *sock, HttpMessage *message); From 21265222ccab1d95007d6e9fca2223639c6eefbf Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 09:02:00 +0900 Subject: [PATCH 12/14] =?UTF-8?q?=E2=9C=A8=20=E4=BD=BF=E7=94=A8=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Server.cpp | 133 ++--------------------------------------- srcs/Server/Server.hpp | 13 ---- 2 files changed, 5 insertions(+), 141 deletions(-) diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index d6939df..68e287b 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -24,23 +24,9 @@ Server::~Server() { for (itr2 = server_sockets.begin(); itr2 != server_sockets.end();) { std::list::iterator sockNode = itr2++; - socketDeleter(*sockNode); + delete ((*sockNode)); server_sockets.erase(sockNode); } - for (itr2 = recv_sockets.begin(); itr2 != recv_sockets.end();) - { - std::list::iterator sockNode = itr2++; - Socket *sock = *sockNode; - deleteMapAndSockList(sockNode, E_RECV); - socketDeleter(sock); - } - for (itr2 = send_sockets.begin(); itr2 != send_sockets.end();) - { - std::list::iterator sockNode = itr2++; - Socket *sock = *sockNode; - deleteMapAndSockList(sockNode, E_SEND); - socketDeleter(sock); - } } int Server::setup() @@ -51,8 +37,11 @@ int Server::setup() for (itr = ports.begin(); itr != ports.end(); itr++) { - if (createServerSocket(strtoi(*itr))) + Socket *sock = new SvSocket(strtoi(*itr)); + if (sock == NULL) return (1); + server_sockets.push_back(sock); + _socketCount++; } memset(&timeout, 0, sizeof(timeout)); timeout.tv_sec = 1; @@ -92,26 +81,6 @@ int Server::run() } } -/** - * @brief サーバーソケット作成 - * - * @param port - * @return int - */ -int Server::createServerSocket(int port) throw() -{ - Socket *sock = new SvSocket(port); - if (sock == NULL) - return (1); - if (setSocket(E_SERVER, sock)) - { - delete (sock); - return (1); - } - _socketCount++; - return (0); -} - bool ClientClosedConnection(ssize_t ret, Socket *sock) { return (ret == 0 && dynamic_cast(sock) && @@ -195,34 +164,6 @@ Connection *Server::accept(Socket *serverSock) return (new Connection(newClSock)); } -/** - * @brief 指定したソケットを監視対象に追加する - * - * @param type - * @param sock - * @param client_sock - * @return int - */ -int Server::setSocket(E_TYPE type, Socket *sock) throw () -{ - try - { - if (type == E_RECV) - recv_sockets.push_back(sock); - else if (type == E_SEND) - send_sockets.push_back(sock); - else if (type == E_SERVER) - server_sockets.push_back(sock); - else - return (1); - return (0); - } - catch(const std::exception& e) - { - return (1); - } -} - int Server::set_fd_set(fd_set &set, std::list sockets, int &maxFd) throw () { int fd; @@ -237,67 +178,3 @@ int Server::set_fd_set(fd_set &set, std::list sockets, int &maxFd) thr } return (0); } - -// 例外: 強い保証 + message を削除する -int Server::addMapAndSockList(Socket *sock, HttpMessage *message, S_TYPE type) throw () -{ - if (message == NULL) - return (1); - std::map *map = NULL; - if (type == E_RECV) - map = &Recvs; - else if (type == E_SEND) - map = &Sends; - if (addMessageToMap(*map, sock, message)) - { - delete (message); - return (1); - } - if (setSocket(type, sock)) - { - map->erase(sock); - delete (message); - return (1); - } - return (0); -} - -// 失敗しない保障 -int Server::deleteMapAndSockList(std::list::iterator sockNode, S_TYPE type) throw() -{ - // delete Map - std::map *map = NULL; - if (type == E_RECV) - map = &Recvs; - else if (type == E_SEND) - map = &Sends; - delete ((*map)[*sockNode]); - map->erase(*sockNode); - - // delete SockList - if (type == E_RECV) - recv_sockets.erase(sockNode); - else if (type == E_SEND) - send_sockets.erase(sockNode); - return (0); -} - -// 例外: 強い保証 -int Server::addMessageToMap(std::map &map, Socket *sock, HttpMessage *message) throw() -{ - try { - map[sock] = message; - } - catch (const std::exception &e) - { - return (1); - } - return (0); -} - -// 失敗しない保障 -void Server::socketDeleter(Socket *sock) throw () -{ - delete (sock); - _socketCount--; -} diff --git a/srcs/Server/Server.hpp b/srcs/Server/Server.hpp index 32c4a97..7900941 100644 --- a/srcs/Server/Server.hpp +++ b/srcs/Server/Server.hpp @@ -46,10 +46,6 @@ class Server private: std::list server_sockets; - std::list recv_sockets; - std::list send_sockets; - std::map Recvs; - std::map Sends; timeval timeout; std::size_t _limitClientMsgSize; int _socketCount; @@ -58,20 +54,11 @@ class Server Socket *getHandleSock(Socket *sock, HttpMessage *recvdMessage, HttpMessage *toSendMessage); int handleSockets(fd_set *read_fds, fd_set *write_fds, int activity); Connection *accept(Socket *serverSock); - int recv(Socket *sock, HttpMessage *message); - ssize_t send(Socket *sock, HttpMessage *message); - int setNewSendMessage(Socket *sock, HttpMessage *message); - int finishSend(Socket *sock); int handleConnectionErr(E_TYPE type, std::list::iterator sockNode, bool timeout); int setCgiErrorResponse(CgiSocket *cgiSock, bool timeout); // utils - static int addMessageToMap(std::map &map, Socket *sock, HttpMessage *message) throw() ; - int addMapAndSockList(Socket *sock, HttpMessage *message, S_TYPE type) throw (); - int deleteMapAndSockList(std::list::iterator sockNode, S_TYPE type) throw(); - void socketDeleter(Socket *sock) throw(); int createServerSocket(int port) throw(); - int setSocket(E_TYPE type, Socket *sock) throw(); static int set_fd_set(fd_set &set, std::list sockets, int &maxFd) throw(); }; #endif From 4b2727781c5585406b3f599e4a7b6795742a4470 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Fri, 16 Feb 2024 09:27:52 +0900 Subject: [PATCH 13/14] =?UTF-8?q?server=E5=86=85=E3=81=AB=E3=81=82?= =?UTF-8?q?=E3=82=8B=20cgi=20=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92=E3=82=B3?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=82=A2=E3=82=A6=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srcs/Server/Server.cpp | 50 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index 68e287b..c43ce01 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -87,32 +87,32 @@ bool ClientClosedConnection(ssize_t ret, Socket *sock) shutdown(sock->getFd(), SHUT_RD) == -1 && errno == ENOTCONN); } -int Server::setCgiErrorResponse(CgiSocket *cgiSock, bool timeout) -{ - if (timeout && cgiSock->killCgi()) - perror("kill: "); - if (ClSocket *clSock = cgiSock->moveClSocket()) - { - clSock->updateLastAccess(); - if (addMapAndSockList(clSock, IHandler::handleError("500", clSock->getLocalPort()), E_SEND)) - { - socketDeleter(clSock); - return (1); - } - } - return (0); -} +// int Server::setCgiErrorResponse(CgiSocket *cgiSock, bool timeout) +// { +// if (timeout && cgiSock->killCgi()) +// perror("kill: "); +// if (ClSocket *clSock = cgiSock->moveClSocket()) +// { +// clSock->updateLastAccess(); +// if (addMapAndSockList(clSock, IHandler::handleError("500", clSock->getLocalPort()), E_SEND)) +// { +// socketDeleter(clSock); +// return (1); +// } +// } +// return (0); +// } -int Server::handleConnectionErr(E_TYPE type, std::list::iterator sockNode, bool timeout) -{ - Socket *sock = *sockNode; - CgiSocket *cgiSock = dynamic_cast(sock); - if (cgiSock) - setCgiErrorResponse(cgiSock, timeout); - deleteMapAndSockList(sockNode, type); - socketDeleter(sock); - return (0); -} +// int Server::handleConnectionErr(E_TYPE type, std::list::iterator sockNode, bool timeout) +// { +// Socket *sock = *sockNode; +// CgiSocket *cgiSock = dynamic_cast(sock); +// if (cgiSock) +// setCgiErrorResponse(cgiSock, timeout); +// deleteMapAndSockList(sockNode, type); +// socketDeleter(sock); +// return (0); +// } int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) { From 85a1c752b7511a49416a943a9f210095f04715d4 Mon Sep 17 00:00:00 2001 From: kotto5 Date: Sat, 16 Mar 2024 17:31:28 +0900 Subject: [PATCH 14/14] move unused code. --- srcs/Server/Server.cpp | 55 +++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/srcs/Server/Server.cpp b/srcs/Server/Server.cpp index c43ce01..3b7d007 100644 --- a/srcs/Server/Server.cpp +++ b/srcs/Server/Server.cpp @@ -87,33 +87,6 @@ bool ClientClosedConnection(ssize_t ret, Socket *sock) shutdown(sock->getFd(), SHUT_RD) == -1 && errno == ENOTCONN); } -// int Server::setCgiErrorResponse(CgiSocket *cgiSock, bool timeout) -// { -// if (timeout && cgiSock->killCgi()) -// perror("kill: "); -// if (ClSocket *clSock = cgiSock->moveClSocket()) -// { -// clSock->updateLastAccess(); -// if (addMapAndSockList(clSock, IHandler::handleError("500", clSock->getLocalPort()), E_SEND)) -// { -// socketDeleter(clSock); -// return (1); -// } -// } -// return (0); -// } - -// int Server::handleConnectionErr(E_TYPE type, std::list::iterator sockNode, bool timeout) -// { -// Socket *sock = *sockNode; -// CgiSocket *cgiSock = dynamic_cast(sock); -// if (cgiSock) -// setCgiErrorResponse(cgiSock, timeout); -// deleteMapAndSockList(sockNode, type); -// socketDeleter(sock); -// return (0); -// } - int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) { std::list::iterator itr; @@ -122,7 +95,6 @@ int Server::handleSockets(fd_set *read_fds, fd_set *write_fds, int activity) std::map newConnections; // サーバーソケット受信 - for (itr = server_sockets.begin(); activity && itr != server_sockets.end();) { sockNode = itr++; @@ -178,3 +150,30 @@ int Server::set_fd_set(fd_set &set, std::list sockets, int &maxFd) thr } return (0); } + +// int Server::setCgiErrorResponse(CgiSocket *cgiSock, bool timeout) +// { +// if (timeout && cgiSock->killCgi()) +// perror("kill: "); +// if (ClSocket *clSock = cgiSock->moveClSocket()) +// { +// clSock->updateLastAccess(); +// if (addMapAndSockList(clSock, IHandler::handleError("500", clSock->getLocalPort()), E_SEND)) +// { +// socketDeleter(clSock); +// return (1); +// } +// } +// return (0); +// } + +// int Server::handleConnectionErr(E_TYPE type, std::list::iterator sockNode, bool timeout) +// { +// Socket *sock = *sockNode; +// CgiSocket *cgiSock = dynamic_cast(sock); +// if (cgiSock) +// setCgiErrorResponse(cgiSock, timeout); +// deleteMapAndSockList(sockNode, type); +// socketDeleter(sock); +// return (0); +// } \ No newline at end of file