socket_get_option
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
socket_get_option — ソケットのオプションを取得する
説明
socket_get_option
( resource $socket
, int $level
, int $optname
) : mixed
socket_get_option() 関数は、ソケット
socket
のオプション optname
の値を取得します。socket_get_option() は、失敗した場合に
false
を返します。
パラメータ
socket
socket_create() あるいは socket_accept() で作成したソケットリソース。
level
level
パラメータは、オプションのプロトコルレベルを指定します。 例えば、オプションをソケットレベルで取得するにはlevel
パラメータにSOL_SOCKET
を指定します。TCP
のようなそれ以外のレベルの場合、そのレベルのプロトコル番号を指定します。 プロトコル番号は getprotobyname() 関数を使用して取得可能です。optname
- {|
|+ 使用可能なソケットオプション
!width="33%"| オプション
!width="33%"| 説明
!width="33%"| 型
|-
|
SO_DEBUG
| デバッグ情報を記録するかどうかを報告します。 | int |- |SO_BROADCAST
| ブロードキャストメッセージの送信がサポートされているかどうかを報告します。 | int |- |SO_REUSEADDR
| ローカルアドレスが再利用可能かどうかを報告します。 | int |- |SO_REUSEPORT
| ローカルポートが再利用可能かどうかを報告します。 | int |- |SO_KEEPALIVE
| 定期的なメッセージの送信によって接続がアクティブになっているかどうかを報告します。 もしソケットがこれらのメッセージに応答できなかった場合、 接続は崩壊し、ソケットへの書き込みを行うと SIGPIPE シグナルを受け取ります。 | int |- |SO_LINGER
|データがまだ残っているうちに socket_close() をコールした場合に、
socket
を残存させるかどうかを報告します。 デフォルトでは、ソケットが閉じられる際には未送信のデータをすべて送信しようとします。 接続ベースのソケットでは、 socket_close() は接続先がデータを認識するまで閉じるのを待ちます。l_onoff
が非ゼロでl_linger
がゼロの場合は、 その時点で未送信のデータはすべて破棄されます。 接続ベースのソケットの場合、接続先には RST (リセット) を送信します。一方
l_onoff
が非ゼロでl_linger
も非ゼロの場合は、 socket_close() は 全データを送信し終えるかl_linger
で指定した時間が経過するまで処理をブロックします。 ソケットが非ブロックモードの場合は、 socket_close() は失敗してエラーを返します。| array。配列に含まれるキーは
l_onoff
およびl_linger
のふたつ。 |- |SO_OOBINLINE
|socket
が帯域外のデータをインラインに残し続けるかを報告します。 | int |- |SO_SNDBUF
| 送信バッファのサイズを報告します。 | int |- |SO_RCVBUF
| 受信バッファのサイズを報告します。 | int |- |SO_ERROR
| エラーステータスに関する情報を報告し、それをクリアします。 | int (socket_set_option() で設定することはできません) |- |SO_TYPE
|socket
の型 (たとえばSOCK_STREAM
) を報告します。 | int (socket_set_option() で設定することはできません) |- |SO_DONTROUTE
| 送信メッセージがルータを越えるかどうかを報告します。 | int |- |SO_RCVLOWAT
|socket
の入力操作を行う際の最小バイト数を報告します。 | int |- |SO_RCVTIMEO
| 入力操作のタイムアウト値を報告します。 | array。配列に含まれるキーはふたつ。sec
はタイムアウトの秒単位の部分で、usec
はタイムアウトのマイクロ秒位の部分。 |- |SO_SNDTIMEO
| 出力関数がフロー制御のためにブロックするタイムアウト値を報告します。 | array。配列に含まれるキーはふたつ。sec
はタイムアウトの秒単位の部分で、usec
はタイムアウトのマイクロ秒位の部分。 |- |SO_SNDLOWAT
|socket
の出力操作を行う際の最小バイト数を報告します。 | int |- |TCP_NODELAY
| Nagle TCP アルゴリズムが無効になっているかどうかを報告します。 | int |- |MCAST_JOIN_GROUP
| マルチキャストグループに参加します (PHP 5.4 で追加)。 | 二つのキー"group"
と"interface"
を含む配列。"group"
には IPv4 あるいは IPv6 のマルチキャストアドレスを文字列で指定します。"interface"
には、インターフェイス番号 (整数値) あるいは"eth0"
などのインターフェイス名 (文字列) を指定します。0
を指定すると、ルーティングテーブルを使ってインターフェイスを選択します (socket_set_option() でのみ利用可能)。 |- |MCAST_LEAVE_GROUP
| マルチキャストグループから離れます (PHP 5.4 で追加)。 | 配列。詳細はMCAST_JOIN_GROUP
を参照ください (socket_set_option() でのみ利用可能)。 |- |MCAST_BLOCK_SOURCE
| 特定のソースから、そのマルチキャストグループにやってくるパケットをブロックします。 そのマルチキャストグループに事前に参加しておく必要があります (PHP 5.4 で追加)。 |MCAST_JOIN_GROUP
と同じキーを含み、さらに追加でもうひとつのキーを含む配列。 追加のキーはsource
で、 ブロック対象となるソースの IPv4 アドレスあるいは IPv6 アドレスを文字列で指定します (socket_set_option() でのみ利用可能)。 |- |MCAST_UNBLOCK_SOURCE
| 特定のソースから、そのマルチキャストグループにやってくるパケットのブロックを解除 (そして、受信を再開) します。 そのマルチキャストグループに事前に参加しておく必要があります (PHP 5.4 で追加)。 |MCAST_BLOCK_SOURCE
と同じ形式の配列 (socket_set_option() でのみ利用可能)。 |- |MCAST_JOIN_SOURCE_GROUP
| 特定の値にマッチするソースアドレスからそのマルチキャストグループにやってきたパケットを受信します (PHP 5.4 で追加)。 |MCAST_BLOCK_SOURCE
と同じ形式の配列 (socket_set_option() でのみ利用可能)。 |- |MCAST_LEAVE_SOURCE_GROUP
| 特定の値にマッチするソースアドレスからそのマルチキャストグループにやってきたパケットの受信を停止します (PHP 5.4 で追加)。 |MCAST_BLOCK_SOURCE
と同じ形式の配列 (socket_set_option() でのみ利用可能)。 |- |IP_MULTICAST_IF
| IPv4 マルチキャストパケットの送信インターフェイス (PHP 5.4 で追加)。 | インターフェイス番号を表す整数値か、インターフェイス名を表すeth0
のような文字列。 0 を指定すると、ルーティングテーブルを使ってインターフェイスを選択します。 socket_get_option() 関数の返り値は、インターフェイスのインデックスとなります。 注意すべき点は、C の API とは違ってこのオプションには IP アドレスを渡せないということです。 そのため、IP_MULTICAST_IF
とIPV6_MULTICAST_IF
のインターフェイスの相違はなくなります。 |- |IPV6_MULTICAST_IF
| IPv6 マルチキャストパケットの送信インターフェイス (PHP 5.4 で追加)。 |IP_MULTICAST_IF
と同じ。 |- |IP_MULTICAST_LOOP
| IPv4 パケットのマルチキャストループバックポリシー。 このソケットが送信したマルチキャストパケットが、 このソケットが使う送信インターフェイス上の同一マルチキャストグループに属する 同一ホスト上の受信者にも届くかどうかを示します。 これはデフォルトの動作です (PHP 5.4 で追加)。 | 整数値 (0
あるいは1
)。socket_set_option() では任意の値を受け付けますが、通常の PHP のルールに従ってそれを boolean 値に変換します。 |- |IPV6_MULTICAST_LOOP
|IP_MULTICAST_LOOP
の IPv6 版 (PHP 5.4 で追加)。 | 整数値。IP_MULTICAST_LOOP
を参照ください。 |- |IP_MULTICAST_TTL
| IPv4 送信パケットの有効期間。0 (このインターフェイスから離れない) から 255 までの値を指定しなければなりません。デフォルトは 1 (ローカルネットワークにだけ到達する) です (PHP 5.4 で追加)。 | 0 から 255 までの整数値。 |- |IPV6_MULTICAST_HOPS
|IP_MULTICAST_TTL
の IPv6 版。 値として -1 を指定することもでき、これはデフォルトのルートを使うことを意味します (PHP 5.4 で追加)。 | -1 から 255 までの整数値。 |}
返り値
指定したオプションの値、あるいはエラー時に false
を返します。
例
例1 socket_get_option() の例
<?php$socket = socket_create_listen(1223);$linger = array('l_linger' => 1, 'l_onoff' => 1);socket_set_option($socket, SOL_SOCKET, SO_LINGER, $linger);var_dump(socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR));?>