send サブルーチン

目的

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

ライブラリー

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

構文

#include <sys/types.h>
#include <sys/socketvar.h>
#include <sys/socket.h>
int send (Socket,
Message, Length, Flags)
int  Socket;
const void * Message;
size_t  Length;
int  Flags;

説明

送信 サブルーチンは、ソケットが接続されている場合にのみメッセージを送信します。 ソケット上のこのサブルーチンはスレッド・セーフではありません。 Sendto および 送信メッセージ サブルーチンは、接続されていないソケットまたは接続されているソケットで使用できます。

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

長さ パラメーターを使用して、メッセージの長さを指定します。 メッセージが長すぎて基礎となるプロトコルを通過できない場合、システムはエラーを返し、メッセージを送信しません。

送信 サブルーチンでは、送達の失敗の表示は暗黙指定されません。 戻り値-11は、ローカルで検出されたエラーを示す。

送信するメッセージを保持するためのスペースが送信側ソケットにない場合、ソケットが非ブロッキング入出力モードでない限り、 送信 サブルーチンはブロックします。 選択 サブルーチンを使用して、いつより多くのデータを送信できるかを判別します。

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

パラメーター

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

戻り値

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

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

  • 呼び出したプログラムに-11を返す。
  • 特定のエラーを示すエラー・コードを エラー番号 グローバル変数に移動します。

エラー・コード

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

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