Internet Control Message Protocol


#include <sys/socket.h>
#include <netinet/in.h>

int socket( AF_INET, 
            proto );


ICMP is the error- and control-message protocol used by IP and the Internet protocol family. The protocol may be accessed through a "raw socket" for network monitoring and diagnostic functions.

To get the proto parameter to socket() that's used to create an ICMP socket, call getprotobyname(). You normally use ICMP sockets, which are connectionless, with sendto() and recvfrom(), although you can also use connect() to fix the destination for future packets (in which case you can use the read() or recv(), and write() or send() system calls).

Outgoing packets automatically have an IP header prepended to them that's based on the destination address. Incoming packets are received with the IP header and IP options intact.

Based on:

RFC 792


A descriptor referencing the socket, or -1 if an error occurs (errno is set).


Tried to create a socket with a network address for which no network interface exists.
Tried to establish a connection on a socket that already has one, or tried to send a datagram with the destination address specified but the socket is already connected.
The system ran out of memory for an internal data structure.
Tried to send a datagram, but no destination address was specified, and the socket hasn't been connected.