PHP ソケットコンテキストオプションの使い方と設定一覧
はじめに
PHPでは、ファイルシステムや各種ストリームラッパーへのアクセスを、stream_context_create() および stream_context_set_option() 関数で設定するコンテキストオプションやパラメータによって、柔軟にカスタマイズすることができます。
以下の表は、tcp、http、ftp など、ソケット経由で動作するすべてのラッパーで利用可能なソケットコンテキストオプションの一覧です。
主なソケットコンテキストオプション
| bindto | ネットワークへのアクセスに使用するIPアドレス(IPv4またはIPv6)やポート番号を指定します。IPv4の場合は ip:port、IPv6の場合は [ip]:port の形式で記述します。 |
| backlog | ソケットのリッスンキューにおける保留中の接続数の上限を設定します。 |
| ipv6_v6only | IPv4をIPv6にマッピングする際のOSのデフォルト動作を上書きします。 |
| so_reuseport | 同じ ip:port のペアへの複数のバインドを許可します。 |
| so_broadcast | ブロードキャストアドレスとの間でデータを送受信できるようにします。 |
| tcp_nodelay | TRUE を指定すると SOL_TCP, NO_DELAY=1 が適切に設定され、TCP Nagleアルゴリズムが無効化されます。これにより小さなパケットの送信遅延を抑えられます。 |
使用例
次の例では、特定のIPアドレス(192.168.0.100)を送信元として指定し、そのソケットコンテキストを使ってHTTP経由でデータを取得しています。
<?php
// '192.168.0.100' のIPアドレスを使用してインターネットに接続
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:0',
),
);
// オプションからコンテキストを作成
$context = stream_context_create($opts);
// ...作成したコンテキストを使ってデータを取得
echo file_get_contents('https://www.example.com', false, $context);
?>このように bindto オプションを活用することで、複数のネットワークインターフェースを持つサーバーにおいて、どのIPアドレス(およびポート)から通信を行うかを明示的に制御できます。ポート番号に 0 を指定した場合は、システムが自動的に空いているポートを割り当てます。
-
ソケットエラー10060(0x800CCC0E)の原因と対処法を徹底解説
ソケットエラー10060(0x800CCC0E)とは?ソケットエラー10060は、接続先サーバーとの通信がタイムアウトしたことを示すエラーです。主にメールクライアントの送受信時や、Webサイトへアクセスする際に発生します。タイムアウトの原因はさまざまですが、メールクライアントの場合はポート番号やアカウント設定のミスが多いのが特徴です。また、Webサイトに関しては、他のサイトには問題なくアクセスできるのに特定のサイトだけ表示されない場合は、そのサイト自体がダウンしているか、こちらのアクセスがブロックされている可能性があります。本ガイドの対象となる環境この記事では、「Outlook」や「Windo
-
Pythonのソケットエラー48(Address already in use)の原因と解決策
ソケットエラー48は、プロセスがすでに使用中のポートへバインドしようとした際に発生するPythonのエラーです。エラーメッセージとしては「socket.error: [Errno 48] Address already in use」と表示されます。「socket.error: [Errno 48] Address already in use」エラーの原因調査の結果、このエラーの主な原因は以下の通りです。ポートへのプロセスのバインド: サーバー上でプロセスを作成すると、インターネットと通信するためにポートが使用されます。ポートとは、一度に一人のゲストしか受け入れられないホストのようなものです