열렬히.뛰기

서버 클래스 만들기

école 42 > ft_irc (server) > 소켓과제 : 진행상황 > 서버 클래스 만들기

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에 넣기

다이어그램