recv サブルーチン
目的
接続されたソケットからメッセージを受信します。
ライブラリー
標準 C ライブラリー (libc.a)
構文
説明
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 することによって形成されます。
|
戻り値
正常終了すると、 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 | ソケットは非ブロッキングとしてマークされ、受け入れられる接続は存在しません。 |