为什么我的连接失败了?

时间:2013-03-27 02:09:17

标签: sockets networking network-programming

我正在尝试进行基本的套接字调用,并尝试连接到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");
}

1 个答案:

答案 0 :(得分:1)

我认为问题在于参数sizeof(*ai->ai_addr)。 ai&gt; ai_addr返回一个指向sockaddr结构的指针,并且解除引用会将您带到结构本身。

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

sizeof返回整个结构的大小,而不是地址的长度。

尝试改为参数ai->ai_addrlen