2010-03-21 6 views
1

나는 소켓 프로그래밍 초보자입니다. 스 니펫은 다음과 같습니다.이상한 고객의 주소가 accept (..) accept

struct sockaddr_storage client_addr; 

... 

client_addr_size = sizeof(client_addr); 
client_socket = accept(server_socket, 
    (struct sockaddr *)&client_addr, &client_addr_size); 

... 

result = inet_ntop(AF_INET, 
    &((struct sockaddr_in *)&client_addr)->sin_addr, 
    client_addr_str, sizeof(client_addr_str)); 

저는 서버로 일하고 있습니다. 클라이언트가 호스트에 관계없이 0.0.0.0이라는 주소를 연결할 때마다. 아무도 내가 뭘 잘못 설명 할 수 있습니까?

감사합니다.

답변

2

확인 client_addr.ss_family을 - 그것이 AF_INET6 가족의 주소를 반환 할 수있다.

+0

네, 맞았습니다. 문제를 해결했습니다. 그러나 또 다른 하나는 깨닫는다. 나는 힌트에서 AI_PASSIVE와 함께 getaddrinfo 함수를 사용한다. 주소는 나중에 :에 소켓을 바인딩합니다. 괜찮습니까? –

+0

예, 괜찮습니다 (소켓이 여전히 'AF_INET6'인 한). – caf

0

좀 더 많은 코드를 표시 할 수 있습니까? 어떤 IP 주소/서비스에 연결하려고합니까?

단서는 IP 주소 자체, 0.0.0.0, 네트워크 인터페이스가 할당 된 IP 주소가없는 보통 상황에서, 아마도 ../갱신 곳에서 DHCP 임대를 허용하도록 DHCP 서버를 찾고 있습니다

충분한 정보를 제공하지 못했기 때문에 나는 발에서 자신을 총격하고 있습니다. 따라서이 대답이 당신의 질문을 만족시키지 못하면 결과로 downvoted하게됩니다!

+0

그는 아무 것도 연결하지 않습니다. 그는 서버 역할을하고 연결을 수락합니다. –

0

다만 추측 - client_addr_str의 선언은 무엇입니까? 이 char*을의 경우 sizeof(client_addr_str)은 (32 비트 또는 64 비트 플랫폼에 따라 4 또는 8.) 포인터의 크기를 반환 다음을 시도해보십시오

char client_addr_str[INET_ADDRSTRLEN]; 
if (inet_ntop(AF_INET, 
    &((struct sockaddr_in *)&client_addr)->sin_addr, 
    client_addr_str, INET_ADDRSTRLEN) == NULL) 
{ 
    /* complain */ 
} 
관련 문제