sendto サブルーチン

目的

ソケットを介してメッセージを送信します。

ライブラリー

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

構文

#include <sys/socket.h>
int sendto
(Socket, Message, Length,
Flags, To, ToLength)
int  Socket;
const void * Message;
size_t  Length;
int  Flags;
const struct sockaddr * To;
socklen_t  ToLength;

説明

Sendto サブルーチンを使用すると、アプリケーション・プログラムは、宛先アドレスを指定することによって、接続されていないソケットを介してメッセージを送信することができます。

ソケットでブロードキャストするには、まず、 So_ ブロードキャスト オプションを使用して setsockopt サブルーチンを発行し、ブロードキャスト許可を取得します。

終了 パラメーターを使用して、ターゲットのアドレスを指定します。 長さ パラメーターを使用して、メッセージの長さを指定します。 メッセージが長すぎて基礎となるプロトコルをパススルーできない場合は、エラー EMSG サイズ が返され、メッセージは送信されません。

送信 ソケットに、送信されるメッセージを保持するスペースがない場合、ソケットが非ブロッキング入出力モードでない限り、 Sendto サブルーチンはメッセージをブロックします。

選択 サブルーチンを使用して、いつより多くのデータを送信できるかを判別します。

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

パラメーター

項目 説明
ソケット ソケットの固有の名前を指定します。
Message 送信するメッセージが入っているアドレスを指定します。
長さ メッセージのサイズをバイト単位で指定します。
flags 送信側がメッセージ伝送を制御できるようにします。 呼び出しを送信するために使用される フラグ パラメーターは、以下の値のいずれかまたは両方を論理 OR 演算することによって形成されます。
MSG_OOB
SOCK_ ストリームをサポートするソケット上のアウト・オブ・バンド・データを処理します。
注:
MSG_DONTROUTE
ルーティング・テーブルを使用せずに送信します。

/usr/include/sys/socket.h ファイルは、 Flags パラメーターを定義します。

TO メッセージの宛先アドレスを指定します。 宛先アドレスは、 /usr/include/sys/socket.h ファイルに定義された sockaddr 構造体です。
ToLength 宛先アドレスのサイズを指定します。

戻り値

正常終了すると、 Sendto サブルーチンは送信された文字数を戻します。

sendtoサブルーチンが失敗した場合、システムは値-11を返し、エラーを示す errnoグローバル変数が設定される。

エラー・コード

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

エラー 説明
EACCES 指定されたソケットへの書き込みアクセスが拒否されたか、ブロードキャスト・パケットを送信しようとしたソケットにブロードキャスト機能がありません。
EADDRNOTAVAIL 指定されたアドレスは有効なアドレスではありません。
EAFNOSUPPORT 指定されたアドレスは、このソケットのアドレス・ファミリーの有効なアドレスではありません。
EBADF ソケット パラメーターが有効ではありません。
ECONNRESET 接続はピアによって強制的にクローズされました。
EDESTADDRREQ ソケットが接続モードでなく、ピア・アドレスが設定されていません。
EFAULT 住所 パラメーターは、ユーザー・アドレス・スペースの書き込み可能部分にはありません。
EHOSTUNREACH 宛先ホストに到達できません。
EINTR データが伝送される前に、シグナルが Sendto に割り込まれました。
EINVAL Length または ToLength パラメーターが無効です。
EISCONN _ 翻訳不要 _SOCK_DGRAM ソケットは既に接続されています。
EMSGSIZE メッセージが大きすぎて、ソケットの要求どおりに一度にすべてを送信することができません。
ENETUNREACH 宛先ネットワークに到達できません。
ENOBUFS システムが内部データ構造のためのメモリーを使い尽くしました。
ENOENT パス名が既存のファイルの名前ではないか、パス名が空ストリングです。
ENOMEM メモリー内の使用可能なデータ・スペースが、グループ /ACL 情報を保持するのに十分な大きさではありません。
ENOPROTOOPT プロトコルが 64 ビット対応ではありません。
ENOTCONN ソケットは接続モードですが、接続されていません。
ENOTSOCK ソケット パラメーターは、ソケットではなくファイルを参照します。
EOPNOTSUPP ソケット引数が、 フラグに設定された 1 つ以上の値をサポートしないソケットに関連付けられています。
EPIPE 接続されたソケットで送信しようとしましたが、リモート・ピアまたは接続のこのサイドのいずれかによって接続がシャットダウンされました。 ソケットのタイプが SOCK_ ストリームの場合、呼び出しプロセスに対して シGPIPE シグナルが生成されます。
EWOULDBLOCK ソケットは非ブロッキングとしてマークされ、受け入れられる接続は存在しません。