stream_socket_sendto
stream_socket_shutdown
ストリーム 関数
PHP Manual

# stream_socket_server

(PHP 5)

stream_socket_server — インターネットドメインまたは Unix ドメインのサーバソケットを作成する

### 説明

resource stream_socket_server ( string `$local_socket` [, int `&$errno` [, string `&$errstr` [, int `$flags` = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource `$context` ]]]] )

`local_socket` で指定された接続ポイントに、 ストリームまたはデータグラムソケットによる接続を作成します。

この関数は、ソケットのみを作成します。接続待ちの状態に入るには、 stream_socket_accept() 関数を使います。

### パラメータ

`local_socket`

  作成されるソケットのタイプは、[トランスポート]://[ターゲット] という形式の URL フォーマットによって指定された トランスポートによって決定されます:

  TCP や UDP といったインターネットドメインのソケット (`AF_INET`) には、`remote_socket` パラメータの ターゲット の部分は、ホスト名または IP アドレスと、 それに続くコロンで区切られたポート番号から構成されていなければなりません。 Unix ドメインのソケットの場合は、`ターゲット` の部分は、ファイルシステムにおけるソケットのファイルを指定しなくては いけません。

  システムの種類によって、Unix ドメインのソケットが利用できない場合があります。 利用できるトランスポートの種類は、stream_get_transports() によって知ることができます。 組み込みのトランスポートのリストは、サポートされるソケットトランスポートのリスト を参照ください。

`errno`

  オプションの `errno` と `errstr` パラメータが存在するときは、そこにシステムレベルの socket()、bind() および listen() のコールにおいて発生した 実際のシステムレベルのエラーを返します。 もし、`errno` に返された値が 0 で、かつ `FALSE` が返された場合、bind() コールを行う前にエラーが発生したことを示しており、これは多くの場合 ソケットの初期化に失敗したことを示しています。 `errno` と `errstr` パラメータは常に参照渡しとなることに留意してください。

`errstr`

  `errno` の説明を参照ください。

`flags`

  ソケット作成フラグの任意の組み合わせを指定できるビットフィールドです。

  > 注意: UDP ソケットに対しては、`STREAM_SERVER_BIND` を `flags` パラメータとして使用する必要があります。

`context`

### 返り値

作成したストリーム、あるいはエラー時に `FALSE` を返します。

### 例

例1 TCP サーバソケットの使用

`<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>`

下記の例は、PHP のスクリプトが、どうやって stream_socket_client() で示したような、 問い合わせに応答するタイムサーバとして機能するかを示したものです。

> 注意: 1024 番よりも小さいポート番号のサーバソケットを作成する場合、 多くのシステムでは root 権限が必要となります。

例2 UDP サーバソケットを利用する

`<?php
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
die("$errstr ($errno)");
}
do {
$pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
echo "$peer\n";
stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);
?>`

### 注意

> 注意: 数値で IPv6 アドレスを指定するときは、 (例 fe80::1) アドレスを角カッコでくくらなくてはなりません。たとえば、 tcp://[fe80::1]:80.

### 参考

- stream_socket_client() - インターネットドメインまたは Unix ドメインのソケット接続を開く
- stream_set_blocking() - ストリームのブロックモードを有効にする / 解除する
- stream_set_timeout() - ストリームにタイムアウトを設定する
- fgets() - ファイルポインタから 1 行取得する
- fgetss() - ファイルポインタから 1 行取り出し、HTML タグを取り除く
- fwrite() - バイナリセーフなファイル書き込み処理
- fclose() - オープンされたファイルポインタをクローズする
- feof() - ファイルポインタがファイル終端に達しているかどうか調べる
- Curl 拡張モジュール

stream_socket_sendto
stream_socket_shutdown
ストリーム 関数
PHP Manual