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 ソケットはコネクションレス型であり、普通 sendto(2) 及び recvfrom(2) コールと共に使用されます。 ただし、後で送られるパケットの宛先を固定する場合は connect(2) コールも使用できます (その場合には普通 read(2) または recv(2) 、及び write(2) または send(2) システムコールと共に使用されます)。

送信パケットには (宛先アドレスに基づいて) 作成された IP ヘッダが自動的に付与されます。 受信パケットは、 IP ヘッダ及びオプションが全く損なわれずに受信されます。

診断
ソケット操作の失敗の際には次のエラーのうちの一つが返されます:

[EISCONN]
    既にコネクションが確立されているソケットに対し さらにコネクションを確立させようとした時、 あるいは既にソケットのコネクションが確立されているのに、 宛先アドレスを指定してデータグラムを送信しようとした時

[ENOTCONN]
    ソケットのコネクションが確立されていない場合に、 宛先アドレスの指定をせずデータグラムの送信を行おうとした時

[ENOBUFS]
    内部的なデータ構造のためのメモリが不足した時

[EADDRNOTAVAIL]
    対応したネットワークインタフェースが存在しない ネットワークアドレスを指定し、ソケットを作成しようとした時

関連項目
recv(2), send(2), inet(4), intro(4), ip(4)

歴史
icmp プロトコルは 4.3BSD から登場しました。