В моем приложении на 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;
}
как я могу это исправить?
thanks1