recv サブルーチン

目的

接続されたソケットからメッセージを受信します。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <sys/socket.h>
int recv (Socket,
Buffer, Length, Flags)
int  Socket;
void * Buffer;
size_t  Length;
int  Flags;

説明

recv サブルーチンは、接続されたソケットからメッセージを受け取ります。 recvfrom および recvmsg サブルーチンは、接続されたソケットと接続されていないソケットの両方からメッセージを受け取ります。 ただし、これらは通常、接続されていないソケットにのみ使用されます。

recv サブルーチンは、メッセージの長さを戻します。 メッセージが長すぎて提供されたバッファーに収まらない場合、メッセージを発行したソケットの タイプ によっては、余分のバイトが切り捨てられることがあります。

ソケットに使用可能なメッセージがない場合、 recv サブルーチンは、ソケットが非ブロッキングでない限り、メッセージの到着を待ちます。 ソケットが非ブロッキングの場合、システムはエラーを戻します。

select サブルーチンを使用して、さらにデータが到着する時期を判別します。

ソケット・アプリケーションは、 COMPAT_43 を定義してコンパイルすることができます。 これにより、 sockaddr 構造体 BSD 4.3 が互換になります。 詳しくは、 socket.hを参照してください。

パラメーター

項目 説明
ソケット ソケット記述子を指定します。
buffer メッセージを入れるアドレスを指定します。
長さ Buffer パラメーターのサイズを指定します。
flags メッセージ受信を制御する値を指します。 /usr/include/sys/socket.h ファイルは、 Flags パラメーターを定義します。 呼び出しを受け取るための引数は、以下の 1 つ以上の値を論理 OR することによって形成されます。
MSG_OOB
アウト・オブ・バンド・データを処理します。 アウト・オブ・バンド・データの重要性はプロトコルに依存します。
MSG_PEEK
着信データをピークします。 データは引き続き未読として扱われ、次回の recv () または同様の関数の呼び出しで読み取られます。
MSG_WAITALL
要求されたバイト数が読み取られるまで関数が戻らないように要求します。 この関数は、シグナルがキャッチされた場合、接続が終了した場合、またはソケットに対してエラーが保留中の場合にのみ、要求されたバイト数より少ないバイト数を戻すことができます。

戻り値

正常終了すると、 recv サブルーチンはメッセージの長さをバイト単位で戻します。

recv サブルーチンが失敗すると、サブルーチン・ハンドラーは以下の関数を実行します。

  • 呼び出したプログラムに-11を返す。
  • 接続が切断された場合は 0 を返します。
  • 特定のエラーを示すエラー・コードを errno グローバル変数に移動します。

エラー・コード

以下のいずれかのエラーが発生すると、 recv サブルーチンは失敗します。

エラー 説明
EBADF Socket パラメーターが有効ではありません。
ECONNRESET リモート・ピアは、接続を強制的にクローズします。
EFAULT データは、プロセス・アドレス・スペースの存在しない部分または保護された部分に受信されるように指示されました。 Buffer パラメーターが有効ではありません。
EINTR データが使用可能になる前に、シグナルが recv サブルーチンに割り込まれました。
EINVAL MSG_OOB フラグが設定され、アウト・オブ・バンド・データは使用できません。
ENOBUF (ENOBUF) 操作を実行するための十分なリソースがシステムにありません。
ENOTCONN 接続されていない SOCK_STREAM ソケットで受信が試行されました。
ENOTSOCK Socket パラメーターは、ソケットではなくファイルを参照します。
EOPNOTSUPP SOCK_DGRAM ソケットの場合は MSG_OOB フラグが設定され、 AF_UNIX ソケットの場合は MSG_OOB フラグが設定されます。
ETIMEDOUT 接続の確立中に接続がタイムアウトになったか、アクティブな接続で送信タイムアウトが発生しました。
EWOULDBLOCK ソケットは非ブロッキングとしてマークされ、受け入れられる接続は存在しません。