ICMP(4)

명칭
icmp - 인터넷 컨트롤 메세지 프로토콜

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

해설
ICMP (은)는, IP 및 인터넷 프로토콜 패밀리에 있어서의, 에러 및 제어 통지를 위한 프로토콜입니다. 본프로토콜의 기능인 네트워크의 모니터링 및 진단 기능은, “raw socket” (을)를 개입시킨 액세스에 의해 이용할 수가 있습니다. ICMP 소켓을 작성하기 위한 socket 콜에의 인수 proto 하 getprotobyname(3) (으)로부터 얻을 수 있습니다. ICMP 소켓은 connectionless형이며, 보통 sendto(2) 및 recvfrom(2) 콜과 함께 사용됩니다. 다만, 다음에 보내지는 패킷의 행선지를 고정하는 경우는 connect(2) 콜도 사용할 수 있습니다 (그 경우에는 보통 read(2) 또는 recv(2) , 및 write(2) 또는 send(2) 시스템 콜과 함께 사용됩니다).

송신 패킷에는 (행선지 주소에 근거해) 작성되었다 IP 헤더가 자동적으로 부여됩니다. 수신 패킷은, IP 헤더 및 옵션이 전혀 손상되지 않고 수신됩니다.

진단
소켓 조작의 실패 시에는 다음의 에러 중 하나가 돌려주어집니다:

[EISCONN]
    이미 connection가 확립되어 있는 소켓에 대해 한층 더 connection를 확립 시키려고 했을 때, 혹은 이미 소켓의 connection가 확립되어 있는데, 행선지 주소를 지정해 데이터 그램을 송신하려고 했을 때

[ENOTCONN]
    소켓의 connection가 확립되어 있지 않은 경우에, 행선지 주소의 지정을 하지 않고 데이터 그램의 송신을 실시하려고 했을 때

[ENOBUFS]
    내부적인 데이터 구조를 위한 메모리가 부족했을 때

[EADDRNOTAVAIL]
    대응한 네트워크 인터페이스가 존재하지 않는다 네트워크 주소를 지정해, 소켓을 작성하려고 했을 때

관련 항목
recv(2), send(2), inet(4), intro(4), ip(4)

역사
icmp 프로토콜은 4.3BSD (으)로부터 등장했습니다.