소켓 프로그래밍 3 - Accept
프로그래밍 2022. 6. 22. 08:36앞서 아래의 내용을 알아 보았습니다.
1. 서버측 소켓 준비와 Listening
https://dicomis.tistory.com/37
2. 클라이언트측 소켓 생성과 연결 요청
https://dicomis.tistory.com/39
이제는 클라이언트의 연결 요청을 서버측에서 수락하는 과정만 남았네요.
Accept
서버가 클라이언트의 연결 요청을 받으면 서버는 socket을 하나 더 생성합니다.
서버 입장에서는 연결되는 클라이언트가 많아질 수 있으니 Child socket 을 만들어서 연결시켜 주고 그 이후로는 연결된 socket끼리 통신을 하도록 하는 것입니다.
즉, 아래 그림과 같이 서버 socket은 새로운 클라이언트의 연결 요청을 대기하고 수락하는 역할을 하게되고 child socket들은 각각 연결된 클라이언트들과 통신을 하게 됩니다.
서버 socket을 이용하면, 예들 들어 클라이언트 5개만 연결 시키고 더 이상은 거부하도록 할 수 있겠죠.
위의 그림의 예에서는 서버측의 Socket들(Server socket, Child socket)은 모두 80 이라는 port를 사용하고 있습니다. 즉, 서버측의 Child socket들은 아무리 많아져도 별도의 port 가 따로 할당되지는 않습니다.
그런데 위 그림처럼 Client socket B와 C가 같은 PC에서 동작하고 있다고 가정해 봅시다. 그러면 서버로 전달되는 Message B와 Message C는 동일한 Address에서 전달되어 오는데 어떻게 구별이 되어서 각각 Child socket B와 C에게 전달이 되는 것일까요?
그것은 Message가 전달될 때에 데이터그램 packet안에 각자의 address 및 port 번호와 연결된 상대의 port 번호가 실려서 보내지기 때문에 구분이 되는 것입니다.
Close
Socket을 다 사용하고 나면 Close를 호출해서 상대편 socket 역시 close되도록 해야 합니다.
그렇지 않으면, 예를 들어 컴퓨터가 전원이 나간다던지 LAN cable을 뽑아 버린다던지 하게되면 상대편 Socket은 연결이 불가능한 상태라는 것을 알지 못하게 됩니다.
다음 부터는 Data가 어떻게 전송 되는지 알아 보겠습니다.
TO BE CONTINUED...
'프로그래밍' 카테고리의 다른 글
Network Byte Ordering (0) | 2022.06.23 |
---|---|
소켓 프로그래밍 4 - Data Boundary (0) | 2022.06.23 |
소켓 프로그래밍 2 - Client와 Port Range (0) | 2022.06.21 |
소켓 프로그래밍 1 - binding (0) | 2022.06.19 |
DI, DIP 그리고 IOC (0) | 2022.06.15 |