2013-05-12 2 views
51

일부 소켓을 프로그래밍하려고하므로 서버 측에서 htonl(INADDR_ANY)을 사용합니다. 내가 이해할 정도까지,이 함수는 임의의 IP를 생성하는 것처럼 보입니다 (맞습니까?). 사실 소켓을 내 localhost으로 묶고 싶습니다. 하지만 이걸 실행하면소켓 프로그래밍에 대한 INADDR_ANY 이해

printf("%d",htonl(INADDR_ANY)); 

반환 값은 0이됩니다. 누군가가 약간의 설명을 할 수 있을까요?

+3

는 "* ... 내가 사용하는'htonl가 (INADDR_ANY가)'. 사이먼이 있다고으로 같이 언급해야한다 특정 IP를 연결하려는 경우 이 함수는 랜덤 IP를 생성합니다 ... * "이것은 올바르지 않습니다. 어떤 문서가 그렇게 말합니까? – alk

+0

@alk 사실, 오도 된 사실입니다. 공식 문서로 생각되는 일부 pdf를 읽었습니다. 지금 내 게시물을 편집 – Newben

답변

73
  1. INADDR_ANY의 bind()는 "임의의 IP 생성"이 아닙니다. 그것 binds the socket to all available interfaces.

  2. 서버의 경우 일반적으로 "localhost"뿐만 아니라 모든 인터페이스에 바인딩해야합니다.

  3. 소켓을 로컬 호스트에만 바인드하려면, 구문은 my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1");이고, bind(my_socket, (SOCKADDR *) &my_sockaddr, ...)을 호출하십시오. 당신이 그것으로 이미 익숙하지 않다면

    http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html

  4. , 나는 당신을 촉구 :

  5. 공교롭게도

    은 "INADDR_ANY는"동일한 "제로"에 발생하는 상수 소켓 프로그래밍에 Beej의 가이드를 체크 아웃 :

    http://beej.us/guide/bgnet/

,363,210
+2

'모든 인터페이스에 바인딩'을 의미하지는 않습니다. 그랬다면 netstat 출력이 다를 것입니다. 그것은 '모든 * 인터페이스에서 듣는다'는 의미입니다. – EJP

+3

위의 링크를 인용하려면 다음과 같이하십시오. "INADDR_ANY가 바인드 호출에 지정되면 소켓은 모든 로컬 인터페이스에 바인딩됩니다." 다른 링크에서 : [값 "INADDR_ANY"는 로컬 컴퓨터에 현재있는 모든/모든 IP 주소에 바인딩한다는 것을 의미합니다.] (http://www.scottklement.com/rpg/socktut/bindapi.html).하지만 예 - 많은 구현이 첫 번째 인터페이스에 바인딩됩니다 ("모두"가 아님). 그러나 NIC가 하나 인 PC의 경우 차이점은 학문적입니다. INADDR_ANY를 사용하면 클라이언트가 모든/모든 IP (예 : 192.168.1.2 및 127.0.0.1)에 연결할 수 있습니다. – paulsm4

+0

0과 같음을 보장합니까? – 0x499602D2

45

INADDR_ANY은 소켓을 특정 IP에 바인딩 할 필요가없는 경우에 사용됩니다. bind()을 호출 할 때이 값을 주소로 사용하면 소켓은 시스템의 모든 IP에 대한 연결을 허용합니다.

+2

유일한 정답입니다. – EJP

5

소켓 로컬 호스트와 결합 하려면 전에를 sockaddr_in 구조의 바인드 기능, sin_addr.s_addr 필드가 제대로 설정해야 호출합니다. 적절한 값

my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1") 

또는

my_sockaddress.sin_addr.s_addr=htonl(INADDR_LOOPBACK); 
0

INADDR_ANY 의해 어느 수득 될 수있다 값 0을 포함하는 상수이다. 이 옵션은 ip-add를 신경 쓰지 않는 모든 활성 포트에서 연결하려는 경우에만 사용됩니다. 그래서 당신은 당신이 이 my_sockaddress.sin_addr.s_addr = inet_addr은 ("192.168.78.2")

관련 문제