ICMP

Протокол межсетевых управляющих сообщений

Прототип:

#include <sys/socket.h>
#include <netinet/in.h>
int socket( AF_INET,
SOCK_RAW,
proto );

Описание:

ICMP - это протокол сообщений об ошибках и управляющих сообщений, используемый протоколом IP и семейством Интернет-протоколов. Доступ к протоколу можно получить через «сырой сокет» для функций мониторинга и диагностики сети.

Для передачи параметра proto в socket(), который используется для создания сокета ICMP, вызовите getprotobyname(). Предполагается использование ICMP сокетов, которые не требуют установления соединения, с sendto() и recvfrom(), хотя также можно использовать и connect() для исправления назначения будущих пакетов (в этом случае можно использовать системные вызовы read() или recv(), и write() или send()).

К исходящим пакетам автоматически в начало добавляется IP-заголовок, основанный на адресе назначения. Входящие пакеты принимаются без изменений заголовка IP и параметров IP.

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

Дескриптор сокета. Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EADDRNOTAVAIL
Произведена попытка создать сокет с сетевым адресом, для которого не существует сетевого интерфейса.
EISCONN
Произведена попытка установить соединение с сокетом, в котором он уже есть, или произведена попытка отправить датаграмму с указанным адресом назначения, но сокет уже подключен.
ENOBUFS
В системе недостаточно памяти для хранения внутренней структуры данных.
ENOTCONN
Произведена попытка отправить датаграмму, однако адрес назначения не указан и сокет не подключен.

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

ICMP6, IP протоколы

connect(), getprotobyname(), read(), recv(), recvfrom(), send(), sendto(), socket(), write()

Основано на RFC 792




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