더북(TheBook)

 

이 의사 코드를 설명하겠습니다.

TCP 소켓을 생성합니다.

TCP 포트 5959번을 점유합니다. TCP 포트 5959번이 이미 사용 중인 경우 이 함수는 실패합니다.

이 소켓은 TCP 연결을 받는 역할을 시작하여 리스닝 소켓이 되었습니다. 이 함수는 즉시 리턴합니다.

TCP 연결이 들어올 때까지 기다립니다. 상대방 컴퓨터가 55.66.77.88:5959로 TCP 연결을 하면 이 함수는 리턴합니다. 리턴하면서 새로운 TCP 소켓의 핸들을 줍니다. 새로운 TCP 소켓은 5959번 이외에 다른 포트를 사용합니다. 여기서 알아야 할 것은 리스닝 소켓은 연결을 수락하는 역할만 할 뿐 데이터를 주고받는 용도로 사용되지 않는다는 점입니다.

accept() 함수에서 받은 새로운 소켓 핸들을 이용해서 저쪽 끝점과 통신을 합니다. 여기서 우리는 저쪽 끝점에 주소를 출력해 봅니다.

새로운 소켓에서 데이터 수신을 합니다. recv()는 수신된 데이터를 리턴합니다만, 수신할 수 있는 데이터가 없으면 블로킹이 일어납니다. 수신할 수 있는 데이터가 있을 때까지 블로킹이 유지됩니다.

TCP 소켓에 대해 수신 함수를 호출했을 때 받은 데이터 크기가 0바이트라면 상대방이 tcp 연결을 끝냈음을 의미합니다. 그래서 여기서는 더 이상 수신을 시도하지 않습니다. (소켓에서 연결 돌발 끊어짐 등 오류가 발생하면 recv()는 음수를 리턴합니다. 이때도 더 이상 수신을 시도할 필요가 없습니다. 책 내용과 의사 코드에서는 지금 이것을 다루지는 않겠습니다. 여러분이 소켓 프로그래밍을 이해하는 데 오히려 방해가 될 수 있기 때문입니다. 그 대신 의사 코드에 첨부되어 있는 실제 구동되는 소스 코드를 참고하세요.)

새로운 소켓의 연결이 끊어졌습니다. 이제 더 이상 사용할 수 없으므로 소켓을 닫습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.