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");
}
4

1 回答 1

1

我相信问题出在参数sizeof(*ai->ai_addr)上。ai->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

于 2013-03-27T02:45:10.393 回答