소켓 통신

lkh의 이미지

클라이언트가 서버로 연결 요청을 보내면 서버는 새로운 소켓을 생성하잖아요
그렇다면 클라이언트가 실제로 서버 소켓과 통신을 하는건 아닌가요?

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

lkh의 이미지

답변 감사합니다

익명 사용자의 이미지

그렇습니다.

1) 서버 소켓은 접수만하고: 대기 줄 세우고 listen()
2) 서비스할 신규소켓을 만들어 넘겨주게 됩니다. : accept()의 리턴값
3) 실제 서버 프로그램은 accept()에서 리턴된 신규 소켓으로 클라이언트와의 통신을 하게 됩니다.

lkh의 이미지

우선 답변 감사드립니다.
그런데 그 새로 생성된 소켓의 포트 번호를 알 수 있는 방법은 없나요?

gilgil의 이미지

연결이 성립된(ESTABLISHED) socket은 local ip, local port, remote ip, remote port 값을 조회할 수 있구요, linux에서는 "netstat -atpn | grep ESTABLISHED"라는 명령어로 확인할 수 있습니다.

getsockname 및 getpeername이라는 API를 사용하면 됩니다. 자세한 코드는 다음 URL을 참고해 보시기 바랍니다.

https://github.com/snoopspy/vdream/blob/master/src/net/vtcpsession.cpp

lkh의 이미지

감사합니다