我正在尝试执行基本的套接字调用,并尝试连接到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");
}发布于 2013-03-27 10:45:10
我认为问题出在参数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。
https://stackoverflow.com/questions/15650804
复制相似问题