我正在尝试创建一个套接字以允许 IPv4 到 IPv4、IPv4 到 IPv6、IPv6 到 IPv4 和 IPv6 到 IPv6 地址连接。
1.) 协议组合(例如 IPv4 到 IPv6、IPv6 到 IPv4)是否允许?
2.) 如果是这样,我是使用源地址族还是目标地址族来创建套接字?
目前我正在使用源地址,并且在使用 IPv6 源地址和 IPv4 目标地址时收到套接字错误 10014 WSAEFAULT。
代码的相关部分:
if ( !strchr( srcAddr, '[' ) )
sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
else
sock = socket( AF_INET6, SOCK_STREAM, IPPROTO_TCP );
if ( !strchr( srcAddr, '[' ) )
{
rc = bind( sock, ( struct sockaddr * ) &sAddrSrc,
sizeof( sAddrSrc ) );
}
else
{
rc = bind( sock, ( struct sockaddr * ) &sAddrSrc6,
sizeof( sAddrSrc6 ) );
}
if ( !strchr( destAddr, '[' ) )
{
rc = connect( sock, (struct sockaddr *) &sAddrDest,
sizeof(sAddrDest) );
}
else
{
rc = connect( sock, ( struct sockaddr * ) &sAddrDest6,
sizeof( sAddrDest6 ) );
}