The PHP Online Conference 2021

ソケットコンテキストオプション

ソケットコンテキストオプションソケットコンテキストオプション一覧

説明

ここでは、ソケット越しに動作するラッパー すなわち tcphttp あるいは ftp でサポートされるオプションを扱います。

オプション

bindto

PHP がネットワークにアクセスする際の IP アドレス (IPv4 あるいは IPv6 のどちらか)やポート番号を指定する際に使用されます。 書式は、IPv4 アドレスの場合は ip:port、 IPv6 アドレスの場合は [ip]:port です。 IP やポート番号に 0 を指定すると、それをシステムに自動的に設定させる ことができます。

注意:

FTP の通常の操作では 2 つのソケット接続を使用するので、 このオプションでポート番号を指定することができません。

backlog

ソケットのリスンキューから出て行く接続の数を制限します。

注意:

stream_socket_server() でのみ有効です。

ipv6_v6only

IPv4射影アドレスに関する OS のデフォルトを上書きする

注意:

これは、[::] に バインドされたアドレスが存在するときに、 IPv4 アドレス で listen しようとする場合に特に重要です。 上で、

stream_socket_server() でのみ有効です。

so_reuseport

異なるプロセスからであっても、同じ IPアドレス:ポート のペアに 複数 bind することを許可します。

注意:

stream_socket_server() でのみ有効です。

so_broadcast

ブロードキャストアドレスへのデータの送信や、 ブロードキャストアドレスからのデータの受信を有効にします。

注意:

stream_socket_server() でのみ有効です。

tcp_nodelay

このオプションを TRUE にすると、 SOL_TCP,NO_DELAY=1 をそれぞれ設定します。 これによって、TCP の Nagle アルゴリズムを無効にします。

変更履歴

バージョン 説明
7.1.0 tcp_nodelay が追加されました。
7.0.1 ipv6_v6only が追加されました。
7.0.0 so_broadcast が追加されました。
7.0.0 so_reuseport が追加されました。
5.3.3 backlog が追加されました。
5.1.0 bindto が追加されました。

例1 基本的な bindto の使用例

<?php
// IP アドレス '192.168.0.100' でインターネットに接続する
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:0',
    ),
);


// IP アドレス '192.168.0.100' とポート番号 '7000' でインターネットに接続する
$opts = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:7000',
    ),
);


// IPv6 アドレス '2001:db8::1' とポート番号 '7000' でインターネットに接続する
$opts = array(
    
'socket' => array(
        
'bindto' => '[2001:db8::1]:7000',
    ),
);


// ポート番号 '7000' でインターネットに接続する
$opts = array(
    
'socket' => array(
        
'bindto' => '0:7000',
    ),
);


// コンテキストを作成し…
$context stream_context_create($opts);

// …そしてデータを取得するためにそれを使用する
echo file_get_contents('http://www.example.com'false$context);

?>

add a note add a note

User Contributed Notes 2 notes

up
4
mix at ater dot me
1 year ago
The right way for forcing IPv6 is 'bindto' => '[::]:0'
up
1
guru at jnt-finland dot fi
4 years ago
You can set "bindto" to "0:0" to force use IPv4 instead of IPv6. And probably "[0]:0" to force use IPv6, thou this I couldn't test.
To Top