第4章 Socket Simulator - I/O
SOCTEST - USER'S GUIDE

本章では、ソケットに対するデータの送受信機能(I/O 操作)について説明します。

送受信操作では、システムコールのパラメータとして以下に示す各種情報を指定します。
所定のパラメータを選択して実行するとシステムコールを発行します。


アドレス

sendto(2) または sendmsg(2) を使用する場合は、送信先アドレスを指定します。
なお、アドレスは事前に Address Manager で登録する必要があります。詳細は、第6章 Address Manager を参照してください。

recvfrom(2) または recvmsg(2) を使用する場合は、送信元アドレスを取得するかどうかを指定します。


メッセージバッファー

送信時にはデータ内容とデータサイズ、受信時にはバッファーサイズを指定します。
誤操作によるパケット通信料の増加抑止のため、送信・受信共に最大サイズは 64KB に制限しています。

送信するデータ内容は以下の中から選択します。なお、カスタムデータは事前に Data Manager で作成・登録する必要があります。詳細は、第7章 Data Manager を参照してください。

データ内容詳細
カスタムデータユーザーが自由に指定可能
All "0" の ASCII 文字列00000000...
連続した数値の ASCII 文字列01234567890123456789...
ランダムな数値の ASCII 文字列0-9 のランダム値
ランダムなアルファベットと数値の
ASCII 文字列
0-9a-zA-Z のランダム値
印字可能でランダムな ASCII 文字列0-9a-zA-Z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ のランダム値
All 0 のバイナリデータ0x00 0x00 0x00 0x00 ...
All 1 のバイナリデータ0xff 0xff 0xff 0xff ...
ランダムなバイナリデータ0x00-0xff のランダム値

[補足]
本来、sendmsg(2) および recvmsg(2) では複数のデータまたはバッファーを指定できます。
しかし、現在のバージョンでは、単一のデータおよびバッファーのみ指定できます。


制御メッセージ

sendmsg(2) を使用する場合に、補助データとして制御情報を送信できます。
また、recvmsg(2) を使用する場合に、受信する補助データのバッファーサイズを指定します。

Level
Type
説明SendRecv
SOL_SOCKET
SCM_RIGHTS
ファイルディスクリプターのリスト(32 ビット整数の配列データ)を UNIX ドメインソケットを通して渡す/受け取る
SOL_SOCKET
SCM_TIMESTAMP
タイムスタンプ(timeval 構造体データ)を受け取る
SOL_SOCKET
SCM_CREDS
プロセスの認証情報(cmsgcred 構造体データ)を UNIX ドメインソケットを通して渡す/受け取る
SOL_SOCKET
SCM_TIMESTAMP_MONOTONIC
モノトニッククロックのタイムスタンプを受け取る
IPPROTO_IP
IP_RECVOPTS
到着した全ての IP オプションを受け取る
IPPROTO_IP
IP_RECVRETOPTS
応答のための IP オプションを受け取る
IPPROTO_IP
IP_RECVDSTADDR
送信先 IP アドレスを受け取る
IPPROTO_IP
IP_RETOPTS
IP オプション情報(ip_opts 構造体データ)を指定して送信する/受け取る
IPPROTO_IP
IP_RECVIF
受信データグラムのインターフェース情報(sockaddr_dl 構造体データ)を受け取る
IPPROTO_IP
IP_RECVTTL
TTL(8 ビット整数)を受け取る
IPPROTO_IP
IP_PKTINFO
到着パケットに関する情報(ip_pktinfo 構造体データ)を指定して送信する/受け取る
IPPROTO_IP
IP_RECVTOS
TOS(8 ビット整数)を受け取る


メッセージフラグ

送受信の詳細動作を指定します。
以下に示す 0 個以上をフラグの論理和で指定します。
フラグの機能の詳細については、man page やインターネット公開サイトの情報を参考にしてください。

フラグ説明SendRecvMsg
MSG_OOBOOB(out-of-band: 帯域外)データを送信する / OOB データの受信を要求する / OOB データを受信したことを示す
MSG_DONTROUTE直接接続されているネットワーク上のホストのみに送信する
MSG_PEEK受信キューからデータを削除せずにデータを返すことを要求する
MSG_WAITALL要求いっぱいのデータ到着まで操作を停止するよう要求する
MSG_TRUNCデータがバッファーより大きかったためデータ末端部分が破棄されたことを示す
MSG_CTRUNC補助データ用のバッファー不足により制御データの一部が破棄されたことを示す