INADDR_ANY
먼저 UNIX Network Programming이라는 곳에서 잘 나왔있던데... ㅡ.ㅡ;; 읽은지 오래되서 생각이 잘 안나지만 한번 적어보도록 하겠습니다.
하나의 피씨에 여러개의 네트웍 인터페이스가 존재하고 각각 서로 다른 IP를 가지게 할 수 있습니다.. 이때, 특정 IP에 대해 소켓을 바인드할 수 있지만 그렇지 않고 INADDR_ANY로 줄 수 있습니다. 이렇게 하고 listen 함수를 부르게 되면... 해당 포트에 대한 어떠한 IP 주소로 들어오는 연결 요청도 받아들일 수 있게 되죠...
이때, netstat -na 명령을 명령창에 수행하면 0.0.0.0:5100 0.0.0.0:0 LISTENING 으로 나타날 것입니다. (포트 번호는 5100이라 가정합니다.)
님은 여기 0를 보시고 의문을 가지시는 듯하는군요... 한가지 잘 못 알고 있는 것은 INADDR_ANY로 주소를 잡아주면 listen 소켓은 커널이 그 주소를 잡아주는 것이 아닙니다... listen 소켓은 그대로 0로 남게 되죠... 그리고 어떤 클라이언트가 서버의 특정 IP 주소로 connect할 때 적어주는 서버 IP 주소로 클라이언트 소켓이 바인드 되는 것입니다...
그러면 어떤 netstat -na 명령을 내리면 (클라이언트가 5.3.2.1로 연결을 시도했다면... 클라이언트 IP는 1.2.3.5입니다. )
0.0.0.0:5100 0.0.0.0:0 LISTENING
5.3.2.1:5100 1.2.3.5:3453 ESTABLISHING
이라고 나타날 것입니다... 위에것은 listen 소켓이고 아래것은 연결된 클라이언트 소켓입니다... 여기서 커널이 random하게 잡아주는 것은 클라이언트 IP 주소와 연결된 포트 번호입니다...
그리고 반대로 connect할 클라이언트 쪽 소켓을 INADDR_ANY로 잡는다면 ㅡ.ㅡ;;; 생각이 가물 가물해서 모르겠는데... 아마 둘 중 하나일 것입니다... connect가 실패하거나 아니면 여러 개의 IP 주소 중에 연결하러는 서버에 연결될 수 있는 IP로 설정될 것입니다... 제 생각으로는 두 번째 이론이 맞을 듯하는군요... 자세한건 직접해보세요 ㅜ.ㅜ 잘 몰라서 쥐송.
'Network' 카테고리의 다른 글
BeeJ's Guide to Network Programming (0) | 2007.04.24 |
---|---|
네트워크 관리 및 라우팅 (0) | 2007.04.24 |
네트워크 관리 및 라우팅 (0) | 2007.04.24 |