recvfrom サブルーチン
目的
ソケットからメッセージを受信します。
ライブラリー
標準 C ライブラリー (libc.a)
構文
説明
recvfrom サブルーチンを使用すると、アプリケーション・プログラムは、接続されていないソケットからメッセージを受け取ることができます。 recvfrom サブルーチンは、通常、受信するデータのソース・ポイントを呼び出し側プログラムが指定できるようにするパラメーターを含んでいるため、接続されていないソケットに適用されます。
メッセージのソース・アドレスを返すには、 From パラメーターに非ヌル値を指定します。 FromLength パラメーターは値-結果パラメーターで、 From パラメーターに関連付けられたバッファーのサイズに初期化されます。 戻り時に、 recvfrom サブルーチンは、保管されているアドレスの実際のサイズを示すように FromLength パラメーターを変更します。 recvfrom サブルーチンは、メッセージの長さを戻します。 メッセージが長すぎて提供されたバッファーに収まらない場合は、メッセージを発行したソケットのタイプによっては、余分のバイトが切り捨てられることがあります。
ソケットに使用可能なメッセージがない場合、 recvfrom サブルーチンは、ソケットが非ブロッキングでない限り、メッセージの到着を待ちます。 ソケットが非ブロッキングの場合、システムはエラーを戻します。
ソケット・アプリケーションは、 COMPAT_43 を定義してコンパイルすることができます。 これにより、 sockaddr 構造体は BSD 4.3 と互換性を持ちます。 詳しくは、 socket.hを参照してください。
パラメーター
| 項目 | 説明 |
|---|---|
| ソケット | ソケット記述子を指定します。 |
| buffer | メッセージを入れるアドレスを指定します。 |
| 長さ | Buffer パラメーターのサイズを指定します。 |
| flags | メッセージ受信を制御する値を指します。 呼び出しを受け取る引数は、以下のリストに示す 1 つ以上の値を論理 OR 演算することによって形成されます。
|
| 送信元 | ソースのアドレスで埋められたソケット構造体を指します。 |
| FromLength | 送信側またはソースのアドレスの長さを指定します。 |
戻り値
recvfrom サブルーチンが正常に実行されると、このサブルーチンはメッセージの長さをバイト単位で戻します。
呼び出しが失敗すると、サブルーチン・ハンドラーは以下の関数を実行します。
- 呼び出したプログラムに-11を返す。
- 特定のエラーを示すエラー・コードを errno グローバル変数に移動します。
エラー・コード
以下のいずれかのエラーが発生すると、 recvfrom サブルーチンは失敗します。
| エラー | 説明 |
|---|---|
| EBADF | Socket パラメーターが有効ではありません。 |
| ECONNRESET | リモート・ピアは、接続を強制的にクローズします。 |
| EFAULT | データは、プロセス・アドレス・スペースの存在しない部分または保護された部分に受信されるように指示されました。 バッファーが無効です。 |
| EINTR | 受信は、データが使用可能になる前にシグナル送達によって割り込まれます。 |
| EINVAL | MSG_OOB フラグが設定されていますが、使用可能なアウト・オブ・バンド・データがありません。 |
| ENOBUF (ENOBUF) | 操作を実行するための十分なリソースがシステムにありません。 |
| ENOPROTOOPT | プロトコルが 64 ビット対応ではありません。 |
| ENOTCONN | 接続されていない SOCK_STREAM ソケットで受信が試行されました。 |
| ENOTSOCK | Socket パラメーターは、ソケットではなくファイルを参照します。 |
| EOPNOTSUPP | SOCK_DGRAM ソケットの場合は MSG_OOB フラグが設定され、 AF_UNIX ソケットの場合は MSG_OOB フラグが設定されます。 |
| ETIMEDOUT | 接続の確立中に接続がタイムアウトになったか、アクティブな接続で送信タイムアウトが発生しました。 |
| EWOULDBLOCK | ソケットは非ブロッキングとしてマークされ、受け入れられる接続は存在しません。 |