404-DriverNotFound / 200-OK

jikang, yunslee, ykoh project for Pass this project
2 stars 1 forks source link

Feat: Connection class 및 소켓프로그래밍 뼈대에 select 기능추가 및 Keep alive demo 버전 구현 #37

Closed exgs closed 3 years ago

exgs commented 3 years ago

Temp

  1. 예제처럼 각각에 server의 이터레이터를 통해 run을 돌리도록 함

  2. 그러기위해서 class Connection의 기본적인 소스코드를 완성하였다.

  3. class Server에서 Servermanager를 사용할 일이 있어서, 상호참조해야하는 문제가 있는데, 인터넷을 참고해서 해결하였음 Temp2

  4. #define 만을 위한 헤더 만듦. 여기서 한번에 추가, 제거, 검색하면 좋다고 생각함

  5. Connection 클래스에 keep_alive에 대응하는 시간차를 계산하는 isKeepConnection() 함수 만듬

  6. 새로운 요청이 들어왔을 때, 클라이언트 소켓을 만드는 함수가 hasNewConnection(), acceptNewConnection() 이다.
    이번에는 함수가 들어왔을 때, keep_alive 시간을 넘어서 제거해주는, 마치 free 처럼 동적해제하는, 함수 두가지를 작성하였다.

    int                          getUnuseConnectionFd();
    void                     closeConnection(int client_fd);

TODO

  1. server의 m_connections<int, Connection> 에서 관리하는 fd가 fd_set에 반영되서, m_max_fd 값에 반영되지 않고 있는데, while(1) 을 도는 중에 반영되도록 해야한다.

Temp3

  1. TODO 문제는 해결하였다,
  2. Define.hpp 를 만들어서 모든 define 값은 여기서 수정,삭제,검색을 한다.
  3. ServerManager class 의 fd_set getter 함수 모두 만듬 (const return이면 안됨. 범용성이 떨어짐)
  4. closeOldConnection() + isKeepConnetion() 으로 keep_alive를 기본적으로 구현함. (전송이 시작되었을 때, 다시 갱신되는 것을 처리해야함 TODO!)
  5. acceptNewConnection() 에서 FD_SET, std::map 에 잘 들어가도록함. 나중을 위하여 NONBLOCK 하는 fctnl도 넣어놨음. 다만 buffer 를 읽는 작업은 이 함수에서 분리되어 run 함수의 반복문 안에서 실행되야함

⚠️ 이슈 없이 Pull Request 금지
아래 항목은 필수이지만, 필요없다고 생각하는 부분은 삭제하고 필요한 부분은 자유롭게 추가 가능

TESTING

  1. make re
  2. postman으로 여러 포트로 POST GET을 날려본다.
  3. 바이트전송에 간격이 있는 경우(nc) 에 대해서는 잘 동작하지는 않는다.(하지만 터지진 않고 keep-alive 만큼만 살아있다.)