server.cpp의 구조
클래스의 구조
javascript
private:
int password;
int port;
public:
getPassword();
getPort();
checkPassword();
initPassPort();
initServSock();
initKqueue();
handleKqueue();
handleConnect();
handleResp();
checkPassword
javascript
체크대상
1. 포트번호가 숫자인가?
2. 포트번호가 잘 알려진 포트인가? (0 - 1023)
3. 포트번호가 65535 이하인가?
fd 다루기
- server fd는 blocking
- server fd는 accept 용도로만 쓰인다.
- client fd들은 전부 non-blocking
- (read/write 할 fd는 전부 non-blocking)
이벤트 다루기
- EV_SET(이벤트 세팅)은 다음과 같이 해야 한다.
- 서버의 소켓 fd : 기본세팅
- EVFILT_READ (READ 이벤트 필터) : 항상 켜놓기
- 클라이언트의 소켓 fd : 기본 세팅
- EVFILT_READ (READ 이벤트 필터) : 항상 켜놓기
- EVFILT_WRITE (WRITE 이벤트 필터) : 필요할 때 켜놓기
- 클라이언트의 소켓 fd : WRITE 필터
- 처음 kqueue에 등록 →
WRITE 등록 설정 + 끄기 설정을 kqueue에 넣기 - 읽기가 끝나고 난 뒤 →
WRITE 이벤트 필터 켜기 설정을 kqueue에 넣기 - 쓰기가 끝나고 난 뒤 →
WRITE 이벤트 필터 끄기 설정을 kqueue에 넣기
- 처음 kqueue에 등록 →