PHP 8.4.1 Released!

socket_create_listen

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

socket_create_listen接続を受けつけるためにポートにソケットをオープンする

説明

socket_create_listen(int $port, int $backlog = SOMAXCONN): Socket|false

socket_create_listen() は、 AF_INET 型で すべての ローカルインターフェイスの指定したポート上で新規接続を待ち受ける 新しい Socket クラスのインスタンスを作成します。

この関数は、新規接続のみを受け入れるソケットを作成しやすくするためのものです。

パラメータ

port

すべてのインターフェイスで待ち受けるポート。

backlog

backlog パラメータは、 接続の順番待ちのキューをどれだけの長さまで保持するかを定義します。 SOMAXCONNbacklog パラメータに渡します。詳細な情報は socket_listen() を参照ください。

戻り値

socket_create_listen() は、 成功した場合に新しい Socket クラスのインスタンスを、 エラー時に false を返します。エラーコードは socket_last_error() で取得可能です。このコードを socket_strerror() に渡すと、エラーの詳細が文字列で取得可能です。

変更履歴

バージョン 説明
8.0.0 成功した場合に、この関数は Socket クラスのインスタンスを返すようになりました。 これより前のバージョンでは、リソースを返していました。

注意

注意:

特定のインターフェイスのみを listen するソケットを作成したい場合は socket_create()socket_bind() および socket_listen() を使用します。

参考

add a note

User Contributed Notes 3 notes

up
10
jdittmer at ppp0 dot net
20 years ago
If you specify no port number, or 0, a random free port will be chosen.
To use ports for ipc between client/server on the same machine you can use (minus error checking)

server.php:
<?php
$sock
= socket_create_listen(0);
socket_getsockname($sock, $addr, $port);
print
"Server Listening on $addr:$port\n";
$fp = fopen($port_file, 'w');
fwrite($fp, $port);
fclose($fp);
while(
$c = socket_accept($sock)) {
/* do something useful */
socket_getpeername($c, $raddr, $rport);
print
"Received Connection from $raddr:$rport\n";
}
socket_close($sock);
?>

client.php:
<?php
$fp
= fopen($port_file, 'r');
$port = fgets($fp, 1024);
fclose($fp);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock, '127.0.0.1', $port);
socket_close($sock);
?>
up
4
sysspoof at ng-lab dot org
16 years ago
Please note that port 1 to and with 1024 on linux and bsd system require root privileges. So it is recommended to choose a higher port for your own application.
up
2
basim at baassiri dot com
20 years ago
Remember that ports are only valid from 1 - 65535

[editor's note: typo fixed, thanks abryant at apple dot com]
To Top