我正在尝试进行基本的套接字调用,并尝试连接到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 :(得分: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
。