ネットワークインタフェース

データ転送

この節では、データの送信と受信のための関数について説明します。メッセージの送受信は、次のように通常の read(2) インタフェースと write(2) インタフェースを使用して行います。

write(s, buf, sizeof buf);
read(s,  buf, sizeof buf);

また、次のように send(3SOCKET) 呼び出しと recv(3SOCKET) 呼び出しも使用できます。

send(s, buf, sizeof buf, flags);
recv(s, buf, sizeof buf, flags);

send(3SOCKET)recv(3SOCKET)read(2)write(2) に非常によく似ていますが、flags 引数が重要です。必要に応じて、sys/socket.h で定義されている以下のフラグをゼロ以外の値として指定できます。

MSG_OOB

帯域外データを送受信する

MSG_PEEK

読み取らずにデータの確認だけを行う

MSG_DONTROUTE

パケットの経路を指定せずにデータを送信する

帯域外データは、ストリームソケットに固有のものです。recv(3SOCKET) 呼び出しで MSG_PEEK が指定される場合、存在するすべてのデータがユーザーに返されますが、データは読み取られていないものとして扱われます。ソケット上の次の read(2) または recv(3SOCKET) 呼び出しは、同じデータを返します。発信パケットに適用されるパケット経路を指定しないデータ送信オプションは、現在、ルーティングテーブルの管理プロセスにだけ使用されており、一般にはほとんど使用されません。