inet_pton()

Преобразовать текстовый адрес хоста в численный адрес

Прототип:

#include <sys/socket.h>
#include <arpa/inet.h>
int inet_pton( int af,
const char *src,
void *dst );

Аргументы:

af
Семейство сетевых адресов, к которому принадлежит src; одно из:
AF_INET
IPv4 адреса
AF_INET6
IPv6 адреса
src
Буфер с текстовым преставлением сетевого адреса. Формат адреса интерпретируется согласно af.
dst
Буфер, в который функция сохранит численное представление сетевого адреса.

Библиотека:

libc

Описание:

Функция inet_pton() преобразует текстовое представление сетевого адреса (src) в числовое (dst).

Преобразованный адрес сохраняется в сетевом порядке байт в dst. Буфер dst должен быть достаточным по размеру для сохранения адреса:

Семейство адресов Размер числового адреса
AF_INET 4 байта
AF_INET6 16 байт

AF_INET адреса

IPv4 адреса должны быть записаны в стандартном десятичном формате с точками:

ddd.ddd.ddd.ddd

где ddd – десятичное число в диапазоне от 0 до 255.


Note: Многие существующие реализации функций inet_addr() и inet_aton() могут принимать нестандартный ввод адреса: восьмиричные, шестнадцатиричные числа, а также адреса, в которых меньше четырёх чисел. Функция inet_pton() не принимает данные форматы записи.

AF_INET6 адреса

IPv6 адреса должны быть указаны в одном из следующих стандартных форматов:

Возвращаемое значение:

1
Успешное завершение.
0
Задан некорректный адрес.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EAFNOSUPPORT
Семейство сетевых адресов, указанное в параметре af, не поддерживается.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#define INADDR "10.1.0.29"
#define IN6ADDR "DEAD:BEEF:7654:3210:FEDC:3210:7654:BA98"
int main()
{
struct in_addr inaddr;
struct in6_addr in6addr;
char buf[INET_ADDRSTRLEN], buf6[INET6_ADDRSTRLEN];
int rval;
if ( (rval = inet_pton( AF_INET, INADDR, &inaddr )) == 0 )
{
printf( "Invalid address: %s\n", INADDR );
exit( EXIT_FAILURE );
} else
if ( rval == -1 )
{
perror( "inet_pton" );
exit( EXIT_FAILURE );
}
if ( inet_ntop( AF_INET, &inaddr, buf, sizeof( buf ) ) != NULL )
printf( "inet addr: %s\n", buf );
else {
perror( "inet_ntop" );
exit( EXIT_FAILURE );
}
if ( (rval = inet_pton( AF_INET6, IN6ADDR, &in6addr )) == 0 )
{
printf( "Invalid address: %s\n", IN6ADDR );
exit( EXIT_FAILURE );
} else
if ( rval == -1 )
{
perror( "inet_pton" );
exit( EXIT_FAILURE );
}
if ( inet_ntop( AF_INET6, &in6addr, buf6, sizeof( buf6 ) ) != NULL )
printf( "inet6 addr: %s\n", buf6 );
else {
perror( "inet_ntop" );
exit( EXIT_FAILURE );
}
return (EXIT_SUCCESS);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

inet_ntop()

Основано на: RFC 2373




Предыдущий раздел: Описание API системной библиотеки