Sockets 为什么我的连接失败?
我正在尝试进行基本的套接字调用,并尝试连接到google.com,但连接调用总是失败并返回-1。有什么原因说明它一定失败了吗Sockets 为什么我的连接失败?,sockets,networking,network-programming,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(por
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");
}
intmain()
{
int-sockfd;
结构addrinfo*ai;
字符端口[4];
if(sockfd=socket(AF_INET,SOCK_STREAM,0)<0){
printf(“插座返回-1”);
}
sprintf(端口,“%d”,80);
if(getaddrinfo(“www.google.com”,port,NULL,&ai)<0)
printf(“-2\n”);
如果(连接(sockfd,ai->ai_addr,sizeof(*ai->ai_addr))<0)
printf(“连接失败-1”);
}
我相信问题出在参数sizeof(*ai->ai\u 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\u addrlen
。尝试sizeof(ai->ai\u addr)
。另外,在getaddrinfo()
之后打印出ai
中的内容,以确保它是合理的。嗯,well connect()在失败时会设置errno。使用peror()并发布结果如何?