我有这个简单的客户端 - 服务器应用程序对。代码很简单,我只使用新的建议的方法,如getaddinfo等,一切工作正常的ipv4。即使对于ipv6 loopback(:: 1)也是如此。问题开始涉及到其他ipv6地址...我有两台机器在网络中,一切正常,当我通过他们的ipv4地址,但当我给我的客户ipv6地址,我得到一个连接函数的错误:无效参数。 嘿,我不知道这个?我做!当我尝试ping6这个IPv6地址,我得到了同样的错误:connect()返回“无效参数”与ipv6地址
connect: Invalid argument
但是有一个方法来克服此块 - 应该选择一个-I开关的接口,这一切,因为运行顺利然后。但是我如何在我的客户端应用程序中实现相同的功能?我该怎么办?我的客户端代码如下所示:
struct addrinfo hints;
struct addrinfo *server;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
int status;
if((status = getaddrinfo(argv[1], argv[2], &hints, &server) != 0))
{
perror("getaddrinfo error");
return 1;
}
int sock_fd;
struct addrinfo *ptr;
for(ptr=server;ptr!=NULL;ptr=ptr->ai_next)
{
if((sock_fd = socket(ptr->ai_family,ptr->ai_socktype,ptr->ai_protocol)) == -1)
{
perror("socket error");
continue;
}
if(connect(sock_fd, ptr->ai_addr,ptr->ai_addrlen) == -1)
{
perror("connect error");
continue;
}
break;
}
这是ping拒绝的有问题的地址是什么? – Ariel
我在ping我的网络中的其他机器,但它对所有ipv6地址的作用相同 - 请检查: http://lists.debian.org/debian-ipv6/2005/06/msg00044.html – flyjohny
@flyjohny也许你应该检查你的路线看看是否默认路由是一个ip6路由命令:“route -A inet6” –