【发布时间】:2011-06-06 00:25:57
【问题描述】:
在我的 Linux C++ 应用程序中,我使用 getpeername 来获取对等 IP。 我的问题是:当我在我的机器上启用 IPv6 时,我从对等方获得的 IP 是家庭 IF_INET6 虽然它是 IPv4。
代码:
int GetSockPeerIP( int sock)
{
struct sockaddr_storage ss;
struct socklen_t salen = sizeof(ss);
struct sockaddr *sa;
memset(&ss,0,salen);
sa = (sockaddr *)&ss;
if(getpeername(sock,sa,&salen) != 0)
{
return -1;
}
char * ip=NULL:
if(sa->sa_family == AF_INET)
{
ip = inet_ntoa((struct sockaddr_in *)sa)->sin_addr);
}
else
{
//ip = how to convert IPv6 to char IP?
}
return 0;
}
我该如何解决?
谢谢1
【问题讨论】:
-
注意
struct socklen_t是错误的,应该是socklen_t。
标签: c++ linux ip system-calls