我试图在linux上使用IPv6套接字连接到IPv4地址,使用IPv4映射的IPv6地址(debian 64 2.6.26-2-AMD 64)
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, void **argv)
{
struct addrinfo *sa;
struct addrinfo *ra;
int err = getaddrinfo("2001:DB8::2", 0, 0, &sa);
int fd = socket(sa->ai_family, SOCK_DGRAM, 0);
int v6only = 0;
err = setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&v6only, sizeof(v6only));
err = bind(fd, sa->ai_addr, sa->ai_addrlen);
err = getaddrinfo("::ffff:192.168.0.1", "9", 0, &ra);
// err = getaddrinfo("2001:DB8::1", "9", 0, &ra);
// err = getaddrinfo("::ffff:127.0.0.1", "9", 0, &ra);
err = connect(fd, (struct sockaddr *)ra->ai_addr, sizeof(struct sockaddr_in6));
}(我已经从粘贴代码中删除了错误测试)
2001:DB8::2和192.168.0.2是本地地址(都位于同一接口上)。
2001:DB8::1和192.168.0.1是远程地址(都位于同一个接口上)。
我更改连接呼叫的远程地址,并获得以下信息:
连接到::ffff:127.0.0.1 success (localhost)
)
如果我更改为执行IPv4连接,那么这些连接也可以工作。
我想在某个地方的路由肯定有问题,但是我不知道我需要改变什么。首先,理论上我应该能够做到吗?
有什么不对吗?
发布于 2012-05-18 03:07:51
.
https://stackoverflow.com/questions/9892770
复制相似问题