, 나는 이와 같은 목록을 작성하는 로컬 소켓 getaddrinfo(NULL,port,&hints,&servinfo)
에에 getaddrinfo()
에 전화를 사용할 수 있습니다한다 getaddrinfo() 리눅스 VS 윈도우는 리눅스에서
IPv4: 0.0.0.0
| socktype: 1 |protocol: 6 IPv4: 0.0.0.0
| socktype: 2 |protocol: 17 IPv4: 0.0.0.0
| socktype: 3 |protocol: 0 IPv6: ::
| socktype: 1 |protocol: 6 IPv6: ::
| socktype: 2 |protocol: 17 IPv6: ::
| socktype: 3 |protocol: 0
을 반면 창에서 로컬에 관한 모든 통화 기계 "NULL"
, "localhost"
, "127.0.0.1"
(실제로는 URL이 아님)은 실패한 것으로 보입니다.
리눅스와 windows간에 getaddrinfo()
을 사용하는 데있어서 의도 된 차이점은 무엇입니까?
또한 - 저는 이런 종류의 질문을 두 가지로합니다.하지만 첫 번째 프로그램의 결과물이 정확히 무엇을 말해 줍니까? 커널이 해당 포트에서 사용할 수있는 유일한 조합입니까?
예,이 질문은 다소 유명한 "Beej 's Guide to Network Programming"에서 발전했습니다.
struct addrinfo hints,*ai,*p;
memset(&hints,0,sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE;
int error;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // use AF_INET6 to force IPv6
hints.ai_socktype = SOCK_STREAM;
if ((error = getaddrinfo("www.example.com", "http", &hints, &ai)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(error));
exit(1);
} else cout <<"Success with a URL\n";
if (error=(getaddrinfo("208.117.45.202",&port,&hints,&ai))){
cout<<"Cannot resolve any usable ports! : "<<gai_strerror(error)<< " : "<<error;
if (ai == NULL) return -5;
}
감사 :
이에 이르기까지의 코드는 같은입니다!
아마 더 많은 코드를 보여 주어야합니다. [getaddrinfo()에 대한 MSDN 문서] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738520%28v=vs.85%29.aspx)는 꽤 철저합니다. 정말 localhost의 경우에도 작동해야하는 것처럼 들립니다. – unwind
Windows 플랫폼 (예 : XAMPP)에서 서버를 실행하고 있습니까? –
아니요, 서버가 없습니다. 서버로서의 상태가'getaddrinfo()'호출의 동작에 차이가 있는지 궁금 해서요 ...하지만 다른 문제로 인해 OS 분할에 대해 생각하는 경향이있었습니다 ... – user1833028