C 带有BSD/POSIX套接字的便携式IPv6连接
我需要连接到IPv6地址。这不是硬编码的。我将以字节形式(char*)获取IPv6地址,并且不会使用DNS检索它们(getaddrinfo没有运气)。问题是,我要填写的sockaddr_in6结构在不同的平台上完全不同 是否有一种很好的可移植方式从原始地址字节连接到IPv6地址C 带有BSD/POSIX套接字的便携式IPv6连接,c,sockets,unix,ipv6,berkeley-sockets,C,Sockets,Unix,Ipv6,Berkeley Sockets,我需要连接到IPv6地址。这不是硬编码的。我将以字节形式(char*)获取IPv6地址,并且不会使用DNS检索它们(getaddrinfo没有运气)。问题是,我要填写的sockaddr_in6结构在不同的平台上完全不同 是否有一种很好的可移植方式从原始地址字节连接到IPv6地址 我还应该提到我也在使用libevent。你真的关心整个结构sockaddr\u in6结构,还是只关心结构in6\u addr?据我所知,我需要sockaddr\u in6连接到IPv6地址。此外,in6_addr(由s
我还应该提到我也在使用libevent。你真的关心整个
结构sockaddr\u in6
结构,还是只关心结构in6\u addr
?据我所知,我需要sockaddr\u in6连接到IPv6地址。此外,in6_addr(由sockaddr_in6使用)在不同的平台上也是不同的。memset
将sockaddr_in6
设置为零,然后只设置所需的字段(大概是.sin6_系列
,.sin6_端口
,以及.sin6_addr
)。POSIX指定in6\u addr
必须包含.s6\u addr[16]
字节,您还关心其他系统吗?(我想Windows很烦人,但这只是一个例子。)好的,谢谢。我可以试试。因此,我将尝试将IP字节移动到sin6_addr。如memmove(&address.sin6_addr,IP,16)
@MatthewMitchell,memcpy()
会更有效率,因为sockaddr\u in6
不太可能与原始字节重叠。