急求毕设问题,怎样获得本机ipv6地址(winsock下)?
蛐蛐蛐 2006-05-16 10:09:26 这个问题已经纠缠好些天了,郁闷啊..
感觉winsock中对ipv6的地址支持的并不好,虽然官方的解释是getaddrinfo和getnameinfo已经可以完成所有的地址解析工作,但是个人觉得用起来很不方便,如inet_ntoa之类的简单转换都很难实现,哪位高手讲一讲吧,下面是代码:
char szHostName[256];
gethostname(szHostName,256);
struct addrinfo hints2, *res2=NULL;
memset(&hints2,0,sizeof(hints2));
hints2.ai_flags=AI_CANONNAME;
hints2.ai_family=AF_INET6;
rc=getaddrinfo(szHostName,"10000",&hints2,&res2);
char *v6IP=res2->ai_addr->sa_data;
char hostName[256];
char servInfo[256];
if ((getnameinfo(res2->ai_addr,
res2->ai_addrlen,
hostName,
256,
servInfo,
256,
NI_NUMERICHOST | NI_NUMERICSERV)) != 0)
{
printf("getnameinfo() failed.\n");
printf("Error #: %ld\n", WSAGetLastError());
return 0;
}
这样只能获得本机的回路地址,即::1
怎样获得本机的链路本地和全球单播地址呢,希望是和网卡无关的,即不需要选择网卡index,十分感谢!