第8章 Menu
SOCTEST - USER'S GUIDE

本章では、メニュー機能について説明します。

アプリの環境設定、ログ画面、および 各種情報についての機能があります。

環境設定(PREFERENCES)

アプリの動作設定および画面設定を変更します。

パラメータ説明
DESCRIPTION各画面に説明文を追加表示します。
説明文は端末の設定言語で表示します。[設定] > [SocTest] で優先する言語を変更することもできます。
また、トップ画面にソケットパラメータ情報を追加表示します。詳細は、第1章 Socket Simulator を参照してください。
AUTO
MONITORING
着信データ、接続処理、全二重接続状態、および TCP ステータス等を監視し、トップ画面に反映します。詳細は、後述します。
トップ画面の表示内容の詳細は、第1章 Socket Simulator を参照してください。
IDLE TIMERiOS のアイドルタイマーを無効にします。
この機能は、アプリがスリープ状態に移行することによる接続断を避けるために使用します。
SCREEN COLORデータ表示ビュー(バイナリエディタやログ画面など)の背景色を反転させます。
無効の場合は、端末設定の外観モード(ライト / ダーク)に合わせます。
SYSTEM CALL
TRACE
システムコールトレースの出力レベルを選択します。詳細は後述します。

AUTO MONITORING 機能の詳細について説明します。
この設定を有効にした場合、以下に示す状態を監視します。この場合、アプリが自動的に poll(2)、getsockopt(2)、および getsockname(2) を発行することに留意してください。
なお、ソケットの挙動を正確に観測する必要がある場合は、この設定を無効にして使用することを推奨します。

  1. 着信データ / 接続要求の有無
  2. 各システムコールの発行後に当該ソケットの状態を polling します。
    この polling は、POLLIN|POLLPRI|POLLOUT を監視対象としてタイムアウト 0 秒で poll(2) を発行します。

  3. ソケットアドレス
  4. カーネルによってソケットに割り当てられる自側アドレスを調べます。
    connect(2) または listen(2) が発行された後、getsockname(2) でアドレスを取得します。

  5. ソケット接続状態
  6. 接続処理の結果および全二重接続の状態を監視します。
    また、non-blocking ソケットで接続処理中の場合、poll(2) と getsockopt(2) により接続状態を判定します。
    状態遷移の詳細については、第1章 Socket Simulator を参照してください。

  7. TCP ステータス / TCP トラフィック量 / TCP RTT
  8. TCP ソケットに紐づくコネクションの状態、送受信トラフィック量、および RTT を監視します。
    各システムコールが発行された後、getsockopt(2) で TCP 情報(TCP_CONNECTION_INFO)を取得します。


ログ(LOG)

アプリからソケットシステムコールが発行されると、システムコールのトレースログが出力されます。
ログ画面でトレースログを参照できます。
行が折り返される場合は、端末を横向きにしてご覧ください。

[補足]
アプリのエラーログも同じ画面に出力されます。エラーログは、アプリ自身に問題が発生したことを意味します。
メモリ使用量を抑えるために 10000 行に達した場合は末行に Reached the limit of log lines が出力され、それ以降のトレースログの出力が停止します。この場合、消去 をタップすることでリセットできます。


ログ出力のフォーマットは以下の通りです。

出力例を以下に示します。

Oct 11 15:52:19.719 [0.000521] socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 5
Oct 11 15:52:23.929 [0.000537] getsockopt(5, SOL_SOCKET, SO_DONTROUTE, [0], [4]) = 0
Oct 11 15:52:25.790 [0.000102] setsockopt(5, SOL_SOCKET, SO_DONTROUTE, [1], 4) = 0
Oct 11 15:52:32.035 [0.000221] connect(5, {sin_family=AF_INET, sin_port=9999, sin_addr="12.34.56.78"}, 16) = -1 Err#51 ENETUNREACH
Oct 11 15:52:36.371 [0.006439] poll([{fd=5, events=POLLIN|POLLPRI|POLLOUT, revents=0}], 1, 0) = 0
Oct 11 15:52:39.736 [0.000100] close(5) = 0

各カラムについて説明します。

カラム説明
MMM dd
発行日
システムコールを発行した日(月:Jan, Feb, ...)
HH:mm:ss.SSS
発行時刻
システムコールが復帰した時刻(精度: ミリ秒)
端末のタイムゾーン設定に応じたローカル時刻で出力されます。
response
レスポンス時間
システムコールの所要時間(精度: マイクロ秒)
function
システムコール名
システムコール一覧画面で指定可能のものに加え、ソケット作成時の socket(2) と削除時の close(2) があります。
arg1, arg2, ...
引数パラメータ
システムコールに指定したパラメータ
詳細は後述します。
retval
復帰値
システムコールの復帰値が表示されます。
エラー発生時(-1 で復帰)には、続けて以下が表示されます。

  Err#<errno number> <errno name>


引数パラメータ表記の仕様は以下のとおりです。

整数

整数を値渡しで指定するパラメータは、定数名(define 名)または数値で出力されます。
出力パラメータとしてアドレス渡しする場合は、[出力値] と出力されます。

構造体

構造体をアドレス渡しで指定するパラメータは、{key1=value1, key2=value2, ...} のように各メンバの変数名と値が出力されます。

[補足]

構造体配列

構造体配列をアドレス渡しで指定するパラメータは、[{element1}, {element2}, ...] と出力されます。
各 element は、上述の構造体の表記に従います。

バッファー(バイト配列)

sendXXX(2) および recvXXX(2) における送受信データなど、任意のバッファー(主に void*)をアドレス渡しで指定します。
このようなパラメータは、SYSTEM CALL TRACE の設定に応じて以下のように出力されます。

出力レベル説明
レベル 1データを出力しません。
システムコールの引数には、<DATA> と出力されます。
レベル 2バイト配列の先頭最大 16 バイトまでを出力します。
システムコールの引数には、"xxxxxxx" のように文字列で出力されます。各バイトが印字可能な Ascii コード範囲であれば Ascii に置き換え、それ以外を ドット(.) で出力されます。
レベル 3システムコールの次の行に、最大 512 バイトまで 16 進ダンプで出力されます。


情報(INFORMATION)

各種情報を掲載しています。

About App

アプリのバージョン情報。

errno

iOS におけるエラー番号および対応メッセージの一覧。

man

ソケットインターフェースのマニュアル(Apple Inc. サイトへのリンク)。

Help

本書。アプリのユーザーズガイド(Github Pages サイトへのリンク)。

Privacy Policy

アプリのプライバシーポリシー(Github Pages サイトへのリンク)。

Terms of Service

アプリの利用規約(Github Pages サイトへのリンク)。