第2章 Socket Simulator - Functions
SOCTEST - USER'S GUIDE
本章では、ソケットに対する各種操作について説明します。
トップ画面でソケットをタップすると、そのソケットに対するシステムコールの一覧画面に遷移します。
ここで選択したシステムコールを発行します。
- システムコールが正常復帰(0 以上が返却)した場合
一部を除き、直前の画面に戻ります。
システムコールによって取得または状態変化した結果は、トップ画面に反映されます。
- システムコールがエラー復帰(-1 が返却)した場合
ポップアップで errno および エラーメッセージが表示されます。
エラーの原因調査はユーザー自身で実施してください。
iOS における errno は、第8章 Menu を参照してください。
getsockopt / setsockopt
ソケットオプションを取得 / 設定します。第3章 Socket Simulator - Options を参照してください。
bind
ソケットにアドレスを割り当てます。
割り当てアドレスは、次に遷移するアドレス一覧画面で選択します。なお、アドレスは事前に Address Manager で登録する必要があります。詳細は、第6章 Address Manager を参照してください。
connect
ソケットを指定されたアドレスに接続します。
接続先アドレスは、次に遷移するアドレス一覧画面で選択します。なお、アドレスは事前に Address Manager で登録する必要があります。詳細は、第6章 Address Manager を参照してください。
SOCK_STREAM の non-blocking ソケットでは、connect(2) が EINPROGRESS でエラー復帰します。この場合、接続完了を監視することができます。詳細は、第8章 Menu を参照してください。
[補足]
本アプリでは、シグナル割り込みにより connect(2) を中断する機能は提供していません。
そのため、接続が即時に完了しない(主にリモートホストに不到達)の場合は、接続タイムアウトになるまで待つ必要があります。
listen
リスニングソケットとしてソケットを接続待ち状態にします。
到着した接続要求はキューに入ります。このキューの長さ(backlog)を次に遷移する画面で指定します。
[注意]
ANY アドレス(0.0.0.0)を割り当てたソケットを使用する場合、不特定多数のホストからのアクセスを受け付けることに留意してください。
この場合、accept(2) や recv(2) を発行しなくても、リモートからの backlog 分の接続を受け入れ、それぞれ受信バッファー分のデータをカーネルが受信します。
[補足]
iOS では SO_ACCEPTFILTER オプションを使用できません。また、ジェイルブレイクしていない iOS 端末では、カーネルの Firewall 機能(packet filter や ipfw)を使用できません。
そのため、本アプリでは、Firewall に相当する制御(特定ホストからのアクセス遮断)ができません。
accept
接続要求をキューから取り出して接続済みソケットを新たに作成します。
接続元アドレスを取得するかどうかを次に遷移する画面で指定して実行します。
[補足]
本アプリでは、シグナル割り込みにより accept(2) を中断する機能は提供していません。
そのため、キューが空(接続要求が未到着)の場合、新規の接続要求が到着するまで操作できません。
この場合は、アプリを再起動してください。
send
sendto
sendmsg
recv
recvfrom
recvmsg
ソケットを使用してデータの送受信を行います。第4章 Socket Simulator - I/O を参照してください。
getsockname
ソケットに結び付けられている現在のアドレスを取得します。
このアドレスはトップ画面に反映されます。詳細は、第1章 Socket Simulator を参照してください。
なお、接続時に自動でアドレスを調べて反映することができます。詳細は、第8章 Menu を参照してください。
getpeername
ソケットに接続している相手のアドレスを取得します。
このアドレスはトップ画面に反映されます。詳細は、第1章 Socket Simulator を参照してください。
shutdown
全二重接続の一部または全てを閉じます。
次に遷移する画面で全二重接続の閉じ方(how)を選択します。
全二重接続の状態はトップ画面に反映されます。詳細は、第1章 Socket Simulator を参照してください。
fcntl(F_GETFL / F_SETFL)
F_GETFL コマンドを使用して現在のソケットの I/O モードを確認します。また、F_SETFL コマンドを使用してソケットの I/O モードを変更します。
ファイル状態フラグに O_NONBLOCK がセットされていれば、non-blocking モードであることを示します。
現在の I/O モードはトップ画面に反映されます。詳細は、第1章 Socket Simulator を参照してください。
poll
ソケットが送受信可能な状態になるのを待ち合わせます(polling)。
この polling では、次に遷移する画面でタイムアウト時間(ミリ秒単位)を選択し、その次の画面で監視するイベント(POLLIN、POLLPRI、および POLLOUT から 0 個以上)を指定します。
各イベントの機能については、man page やインターネット公開サイトの情報を参考にしてください。
poll(2) が復帰すると監視結果として発生したイベントが表示されます。
[補足]
本アプリでは、シグナル割り込みにより poll(2) を中断する機能は提供していません。
そのため、No timeout(無期限にブロック)を指定した場合にイベントが無いと操作できなくなリます。
この場合は、アプリを再起動してください。
Copyright © 2021 manabapp. All rights reserved.
English | 日本語