이 의사 코드를 설명하겠습니다.
➊ TCP 소켓을 생성합니다.
➋ TCP 포트 5959번을 점유합니다. TCP 포트 5959번이 이미 사용 중인 경우 이 함수는 실패합니다.
➌ 이 소켓은 TCP 연결을 받는 역할을 시작하여 리스닝 소켓이 되었습니다. 이 함수는 즉시 리턴합니다.
➍ TCP 연결이 들어올 때까지 기다립니다. 상대방 컴퓨터가 55.66.77.88:5959로 TCP 연결을 하면 이 함수는 리턴합니다. 리턴하면서 새로운 TCP 소켓의 핸들을 줍니다. 새로운 TCP 소켓은 5959번 이외에 다른 포트를 사용합니다. 여기서 알아야 할 것은 리스닝 소켓은 연결을 수락하는 역할만 할 뿐 데이터를 주고받는 용도로 사용되지 않는다는 점입니다.
➎ accept() 함수에서 받은 새로운 소켓 핸들을 이용해서 저쪽 끝점과 통신을 합니다. 여기서 우리는 저쪽 끝점에 주소를 출력해 봅니다.
➏ 새로운 소켓에서 데이터 수신을 합니다. recv()는 수신된 데이터를 리턴합니다만, 수신할 수 있는 데이터가 없으면 블로킹이 일어납니다. 수신할 수 있는 데이터가 있을 때까지 블로킹이 유지됩니다.
➐ TCP 소켓에 대해 수신 함수를 호출했을 때 받은 데이터 크기가 0바이트라면 상대방이 tcp 연결을 끝냈음을 의미합니다. 그래서 여기서는 더 이상 수신을 시도하지 않습니다. (소켓에서 연결 돌발 끊어짐 등 오류가 발생하면 recv()는 음수를 리턴합니다. 이때도 더 이상 수신을 시도할 필요가 없습니다. 책 내용과 의사 코드에서는 지금 이것을 다루지는 않겠습니다. 여러분이 소켓 프로그래밍을 이해하는 데 오히려 방해가 될 수 있기 때문입니다. 그 대신 의사 코드에 첨부되어 있는 실제 구동되는 소스 코드를 참고하세요.)
➑ 새로운 소켓의 연결이 끊어졌습니다. 이제 더 이상 사용할 수 없으므로 소켓을 닫습니다.