SEND(2) — NEWS-OS Programmer’s Manual
名称
send, sendto, sendmsg − ソケットからメッセージを送る
形式
#include <sys/types.h>
#include <sys/socket.h>
cc = send(s, msg, len, flags)
int cc, s;
char ∗msg;
int len, flags;
cc = sendto(s, msg, len, flags, to, tolen)
int cc, s;
char ∗msg;
int len, flags;
struct sockaddr ∗to;
int tolen;
cc = sendmsg(s, msg, flags)
int cc, s;
struct msghdr msg[];
int flags;
解説
send、 sendto、 sendmsg は、メッセージを別のソケットへ送るために使用されます。 send は ソケットが connect されている状態にあるときにだけ使用することができます。 一方、 sendto と sendmsg は、 いつでも使用することができます。
ターゲットのアドレスは、 to によって与えられ、 tolen は、 そのアドレスのサイズを 指定します。 メッセージの長さは、 len によって与えられます。 メッセージが長すぎて使用しているプロトコルで送れない場合には、 エラー "EMSGSIZE" が返されます。
send では、 送信の失敗は明示されません。 リターン値 −1 は、 要求元で検出されたいくつかのエラーを 示します。
ソケットでメッセージスペースが不足していて、 送信するメッセージを 収容できない場合、 そのソケットが非ブロッキング入出力モードにない限り、 通常、 send はブロックします。 select(2) コールを 使用してソケットがレディーであるかどうかを 判定することができます。
flags パラメタには、 次の値を インクルードすることができます。
#defineMSG_OOB0x1/∗ process out-of-band data ∗/
#defineMSG_DONTROUTE0x4/∗ bypass routing, use direct interface ∗/
フラグ MSG_OOB は、“out-of-band” データを サポートしているソケット (例えば、 SOCK_STREAM) で、 そのようなデータを 送るときに使用することができます。 その場合、 使用しているプロトコルも “out-of-band” データを サポートしていなければなりません。 MSG_DONTROUTE は、 普通、 ダイアグまたはルーティングプログラムによって使用されるだけです。
msghdr 構造体の説明は、 recv(2) を 参照してください。
リターン値
このコールは、 送られたバイトの数を 返します。 エラーが発生した場合には、 −1 を返します。
エラー
[EBADF] 無効なディスクリプタが指定された。
[ENOTSOCK] 引数 s がソケットではない。
[EFAULT] パラメタに、 無効なユーザスペースアドレスが指定された。
[EMSGSIZE] ソケットがメッセージを 送信できない。 これは、 メッセージのサイズが原因である。
[EWOULDBLOCK] ソケットが非ブロッキングとしてマークされている場合に、 要求されたオペレーションがブロックする。
[ENOBUFS] システムが内部バッファを 割り当てることができなかった。 バッファが使用可能になったときに要求されたオペレーションが実行される。
[ENOBUFS] ネットワークインターフェースの出力キューがいっぱいであった。 普通、 これはインターフェースが送信を 停止したことを 示すが、 過度の混雑が原因となっている。
関連事項
fcntl(2), recv(2), select(2), getsockopt(2), socket(2), write(2)
NEWS-OSRelease 4.2.1R