본문 바로가기
일상,취미

다시 시작하는 TIL 26일차

by 진득한진드기 2024. 7. 16.

오늘 한일 

 

최근 사업 ppt 작성이랑 관련 발표할 내용들을 하나하나 모으니까 코딩은 못하는 거 같다.

 

하기 싫은일도 하긴해야되지만 이런거는 진짜 너무 부담스러운거 같다......

 

오히려 코딩할 때보다 레포트 정리하고 자료 조사하는게 시간이 뚝딱뚝딱 가버린다.

 

이번주 까지니까 열심히 해보고 발표도 제대로 해보자.

 

퇴근 후 공부

 

TCP가 요청 하나당 하나의 연결을 유지할 수 밖에없던 이유는 연결 흐름이 하나이기 때문이다.

하지만 서버는 바쁘기 때문에 Listen해주는 제어흐름을 하나를 만들고

서비스를 유지하는 흐름을 하나 더 유지해야한다.

이를 위해서 우리는 프로세스의 fork() 배웠다.

자식 프로세스는 부모를 복사했기에 클라이언트의 소켓과 리스닝 소켓도 가지고 있다.

부모 프로세스는 연결이 되고 나면 불 필요한것은 client 소켓은 불필요하다.

자식 프로세스는 listening 소켓이 불필요하다.

단계는 다음과 같다.

1. 에코 서버는 accpet 함수호출을 통해 연결요청을 수락한다.
2. 이때 얻게 되는 소켓의 파일 디스크립터를 자식 프로세스를 생성해서 준다.
3. 자식 프로세스는 전달받은 파일 디스크립터를 바탕으로 서비스를 제공한다.

프로세스가 복사되는 경우 해당 프로세스에 의해 만들어진 소켓이 복사되는게 아니고, 파일 디스크립터가 복사된다.
 
부모 프로세스가 그대로 복사되면 운영체제가 인식하는 소켓은 server와 client 하나씩인데 자식과 부모 모두 디스크립터는 각각 2개가된다.

이렇게 되면 두 디스크립터가 다 종료되어야만 리소스가 반환된다.

만약 자식이 Close로 닫아도 파일 운영체제는 다 반환되지 않아서 리소스를 반환하지 않는다.

하나의 소켓에 두개의 파일 디스크립터가 존재하는 경우, 두 파일 디스크립터 모두 종료되어야 해당 소켓 소멸 그래서 fork 함수호출 후에는 서로에게 상관없는 파일 디스크립터를 종료한다.

'일상,취미' 카테고리의 다른 글

다시 시작하는 TIL 28일차  (6) 2024.07.20
다시 시작하는 TIL 27일차  (0) 2024.07.18
다시 시작하는 TIL 25일차  (0) 2024.07.12
다시 시작하는 TIL 24일차  (0) 2024.07.10
다시 시작하는 TIL 23일차  (0) 2024.07.08