stream_socket_accept
(PHP 5, PHP 7, PHP 8)
stream_socket_accept — stream_socket_server() で作られたソケットの接続を受け入れる
説明
stream_socket_accept(resource
$socket
, ?float $timeout
= null
, string &$peer_name
= null
): resource|false以前に stream_socket_server() によって作られたソケットの接続を受け入れます。
パラメータ
socket
-
接続元からの接続を受け付けるサーバーソケット。
timeout
-
デフォルトのソケット接続待ちタイムアウトを上書きします。 時間は秒単位で指定します。 デフォルトでは、 default_socket_timeout の値が使われます。
peer_name
-
接続元のクライアントの名前 (アドレス) が含まれていて、 選択したトランスポートで有効であった場合に、それを設定します。
注意:
後で stream_socket_get_name() を使用して指定することもできます。
戻り値
受け付けたソケット接続へのストリームを返します。失敗した場合に false
を返します。
変更履歴
バージョン | 説明 |
---|---|
8.0.0 |
timeout は、nullable になりました。
|
注意
警告
この関数は UDP サーバーソケットとともに使用すべきではありません。 代わりに stream_socket_recvfrom() および stream_socket_sendto() を使用します。
参考
- stream_socket_server() - インターネットドメインまたは Unix ドメインのサーバーソケットを作成する
- stream_socket_get_name() - ローカルまたはリモートのソケットの名前を取得する
- stream_set_blocking() - ストリームのブロックモードを有効にする / 解除する
- stream_set_timeout() - ストリームにタイムアウトを設定する
- fgets() - ファイルポインタから 1 行取得する
- fgetss() - ファイルポインタから 1 行取り出し、HTML タグを取り除く
- fwrite() - バイナリセーフなファイル書き込み処理
- fclose() - オープンされたファイルポインタをクローズする
- feof() - ファイルポインタがファイル終端に達しているかどうか調べる
- cURL 関数
+add a note
User Contributed Notes 2 notes
leleu256NOSPAM at hotmail dot com ¶
20 years ago
This code could be very helpfull...
The following code is for the "server". It listen for a message until CTRL-C
<?php
while (true)
{
// disconnected every 5 seconds...
receive_message('127.0.0.1','85',5);
}
function receive_message($ipServer,$portNumber,$nbSecondsIdle)
{
// creating the socket...
$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);
if (!$socket)
{
echo "$errstr ($errno)<br />\n";
}
else
{
// while there is connection, i'll receive it... if I didn't receive a message within $nbSecondsIdle seconds, the following function will stop.
while ($conn = @stream_socket_accept($socket,$nbSecondsIdle))
{
$message= fread($conn, 1024);
echo 'I have received that : '.$message;
fputs ($conn, "OK\n");
fclose ($conn);
}
fclose($socket);
}
}
?>
The following code is for the "client". It send a message, and read the respons...
<?php
send_message('127.0.0.1','85','Message to send...');
function send_message($ipServer,$portServer,$message)
{
$fp = stream_socket_client("tcp://$ipServer:$portServer", $errno, $errstr);
if (!$fp)
{
echo "ERREUR : $errno - $errstr<br />\n";
}
else
{
fwrite($fp,"$message\n");
$response = fread($fp, 4);
if ($response != "OK\n")
{echo 'The command couldn\'t be executed...\ncause :'.$response;}
else
{echo 'Execution successfull...';}
fclose($fp);
}
}
?>
Andy at txtNation dot com ¶
13 years ago
To check if there's a new connection waiting, without blocking, or (when using non-blocking mode) without notices), you can use stream_accept (as opposed to socket_select).
<?php
class GenericClass {
protected $resSocket=null;
function acceptConnections() {
# check that we still have a resource
if(is_resource($this->resSocket)) {
$arrRead=array($this->resSocket);
$arrWrite=array();
/** @warning Passing $arrRead,$arrWrite by reference */
if(stream_select($arrRead,$arrWrite,$arrWrite,0)) {
$resConnection=stream_socket_accept($this->resSocket,0);
# ... other stuff here
}
}
}
}
?>
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google