2021-03-17(Wed)
항목 | 내용 |
학습 날짜 | 2021-03-17(수) |
학습 시간 | 11:00~24:00 |
학습 범위 및 주제 | socket, bind, listen, select, accept |
학습 목표 | exam06을 통과할 수 있도록 학습한다. |
동료 학습 방법 | - |
상세 학습 내용
서브젝트는 끝냈지만, 바로 이어서 학습 시작했다. exam06에서 요구하는 IRC 간이 서버를 바로 구현할 수 있도록 연습했다.
일반적으로 웹서버는 아래 플로우를 따라간다.
socket을 만든다. TCP/IP에서는 SOCK_STREAM을 사용한다.
bind 함수로 socket에 server socket에 필요한 정보(주소, port 번호 등)를 할당하고 커널에 등록한다. 이제 다른 시스템과 통신할 수 있는 상태가 된다.
이제 listen 함수를 활용하여 socket_fd으로 클라이언트 접속 요청을 확인할 수 있도록 셋팅한다. 한편 클라이언트 측에서 connect로 접속요청을 한다.
우린 select로 요청을 감지하여 socket_fd에 변화가 있으면 아래 5번을 실행하고, 아니라면 6번을 실행한다.
클라이언트 접속 요청에 따라 accpet로 접속을 허락한다. 이제 client socket이 만들어졌다.
recv/read를 통해 전송되어 오는 데이터를 읽어들인다. 이후 write/send로 클라이언트에게 데이터를 전송한다.
이 때 exam 요구사항에 따라 어느 한 클라이언트의 메시지를 모든 나머지 클라이언트에게 브로드캐스트하도록 구현하면 된다. 이를 위해 클라이언트 정보를 리스트로 저장하여 브로드캐스트하는데 활용하였다.
학습 내용에 대한 개인적인 총평
42에서는 웹서버 구현과 IRC 구현 중 하나를 선택해서 구현할 수 있다. 그런데 exam06이 IRC 구현과 비슷하다고 하여 익숙치않을거라 긴장했는데, 얼마 전까지 액션케이블로 브로드캐스트하여 챗팅하는 기능을 구현해서인지 별 위화감 없이 구현할 수 있었다. 굿굿
다음 학습 계획
exam06 응시
Last updated