2013-03-27 8 views
0

기본 소켓 호출을 시도하고 google.com에 연결하려고하지만 연결 호출이 항상 실패하고 -1을 반환합니다. 왜 실패해야하는지에 대한 이유연결이 실패하는 이유는 무엇입니까?

int main() 
{ 
    int sockfd; 
    struct addrinfo *ai; 
    char port[4]; 
    if(sockfd = socket(AF_INET, SOCK_STREAM, 0) < 0) { 
     printf("socket return -1"); 
    } 
    sprintf(port, "%d", 80); 
    if(getaddrinfo("www.google.com", port, NULL, &ai) < 0) 
     printf("-2\n"); 

    if(connect(sockfd, ai->ai_addr, sizeof(*ai->ai_addr)) < 0) 
     printf("connect failed -1"); 
} 
+0

'sizeof (ai-> ai_addr)'을 사용해보세요. 또한'getaddrinfo()'다음에'ai'에있는 내용을 인쇄하여 합리적인지 확인하십시오. – EJP

답변

1

나는이 문제가 매개 변수 sizeof(*ai->ai_addr)에 있다고 생각한다. ai-> ai_addr은 sockaddr 구조체에 대한 포인터를 반환하고 dereferencing은 구조체 자체로 이동합니다.

struct sockaddr { 
    unsigned short sa_family; // address family, AF_xxx 
    char   sa_data[14]; // 14 bytes of protocol address 
}; 

sizeof는 주소의 길이가 아닌 전체 구조체의 크기를 반환합니다.

대신 ai->ai_addrlen을 사용해보십시오.

+0

그 중 하나도 작동하지 않습니다 – 0xhacker

+0

음, 잘 connect()는 실패 할 때 errno를 설정합니다. perror()를 사용하고 결과를 게시하는 것은 어떻습니까? – kronion

관련 문제