Может ли кто-нибудь предложить, пожалуйста, что нужно изменить, чтобы он стал также совместимым с IPV6. Работает нормально для IPV4
int lookup_numeric( const char * hostname, char * ip_address )
{
int index = 0;
int value = 0;
for( const char * cursor = hostname; ; ++cursor )
{
if( ( '0' <= *cursor ) && ( *cursor <= '9' ) )
{
value *= 10;
value += *cursor - '0';
if( value > 255 )
break;
}
else if( *cursor == '.' )
{
if( index >= IpAddressSize ) //IpAddressSize is 16 for IPV6 and 4 for IPV4.
break;
ip_address[ index++ ] = (char)value;
value = 0;
}
else if( *cursor == '\0' )
{
if( index != IpAddressSize - 1 )
break;
ip_address[ index ] = (char)value;
return 1;
}
else
break;
}
return 0;
}
1 ответ
Решение
Похоже, что функция принимает текстовое представление адреса IPv4 (например, "127.0.0.1") и преобразует его в массив байтов.
Вы действительно не должны делать такие вещи вручную, на мой взгляд, вам лучше использовать getaddrinfo(), который, вероятно, доступен на вашей платформе.