sendmmsg サブルーチン
目的
メッセージ構造を使用して、ソケットから複数のメッセージを送信します。
構文
#include <sys/types.h>
#include <sys/socketvar.h>
#include <sys/socket.h>
int sendmmsg (Socket, Messages, Flags)
int Socket;
struct mmsghdr Message [];
int Flags;
説明
sendmmsg サブルーチンは、 mmsghdr メッセージ構造体を使用して、接続されたソケットまたは接続されていないソケットを介してメッセージを送信します。 /usr/include/sys/socket.h ファイルには、 mmsghdr メッセージ構造体が含まれ、構造体メンバーを定義します。 このサブルーチンは、 sendmsg サブルーチンの拡張です。
パラメーター
- ソケット
- ソケット記述子を指定します。
- メッセージ
- 送信されるメッセージを含む
mmsghdrメッセージ構造の配列を指します。 - フラグ
- 送信側がメッセージ伝送を制御できるようにします。 呼び出しを送信するために使用される Flags パラメーターは、フラグ値の論理 OR 演算によって形成されます。 sendmmsg サブルーチンは、 sendmsg サブルーチンと同じフラグ値を受け入れます。 sys/socket.h ファイルには、 Flags パラメーターが含まれています。
戻り値
正常終了すると、 sendmmsg サブルーチンは送信されたメッセージの数を戻します。
sendmmsg サブルーチンは、各 mmsghdr 構造体の msg_len 属性を更新して、対応するメッセージから送信されるバイト数を示します。
sendmmsg サブルーチンが失敗すると、システム・ハンドラーは以下の機能を実行します。
- 呼び出し元のプログラムに-1を返す。
- 特定のエラーを示すエラー・コードを エラー番号 グローバル変数に移動します。
エラー・コード
以下のいずれかのエラーが発生すると、 sendmmsg サブルーチンは失敗します。
| エラー | 説明 |
|---|---|
| EACCES | 指定されたソケットへの書き込みアクセスが拒否されたか、ブロードキャスト・パケットを送信しようとしているソケットにブロードキャスト機能がありません。 |
| EADDRNOTAVAIL | 指定されたアドレスは有効なアドレスではありません。 |
| EAFNOSUPPORT | 指定されたアドレスは、ソケットのアドレス・ファミリーの有効なアドレスではありません。 |
| EBADF | Socket パラメーターが有効ではありません。 |
| ECONNRESET | 接続はピアによって強制的にクローズされました。 |
| EDESTADDRREQ | ソケットは接続モードではなく、ピア・アドレスが設定されていません。 |
| EFAULT | Address パラメーターは、ユーザー・アドレス・スペースの書き込み可能部分にはありません。 |
| EHOSTUNREACH | 宛先ホストに到達できません。 |
| EINTR | データが伝送される前に、シグナルが sendmmsg サブルーチンに割り込まれました。 |
| EINVAL | msghdr 構造体の長さが無効です。 |
| EISCONN | SOCK_DGRAM ソケットは既に接続されています。 |
| EMSGSIZE | メッセージが大きすぎて一緒に送信できない (ソケット要件により) か、または Messages パラメーターが指す msghdr 構造体の msg_iovlen メンバーが 0 以下であるか、または IOV_MAX 値より大きくなっています。 |
| ENOENT | パス名が既存のファイルを指していないか、パス名が空ストリングです。 |
| ENETUNREACH | 宛先ネットワークに到達できません。 |
| ENOBUFS | システムが内部データ構造のためのメモリーを使い尽くしました。 |
| ENOMEM | メモリー内の使用可能なデータ・スペースが、グループ情報またはアクセス制御リスト (ACL) 情報を保持するのに十分な大きさではありません。 |
| ENOPROTOOPT | プロトコルは 64 ビットをサポートしません。 |
| ENOTCONN | ソケットは接続モードですが、接続されていません。 |
| ENOTSOCK | Socket パラメーターは、ソケットではなくファイルを参照します。 |
| EOPNOTSUPP | Socket 引数は、 Flags パラメーターに設定された 1 つ以上の値をサポートしないソケットに関連付けられています。 |
| EPIPE | 接続されたソケットで送信しようとしましたが、リモート・ピアまたは接続のソケット・サイドのいずれかによって接続がシャットダウンされました。 ソケットのタイプが SOCK_ ストリームの場合、呼び出しプロセスに対して シGPIPE シグナルが生成されます。 |
| EWOULDBLOCK | ソケットは nonblockingとしてマークされ、受け入れられる接続は存在しません。 |