【PHP8.x】stream_socket_shutdown関数の使い方
作成日: 更新日:
stream_socket_shutdown関数は、既存のストリームソケット接続の送受信機能を、指定した方向のみ停止するために使用される関数です。この関数は、TCP/IPなどのネットワーク通信において、完全に接続を終了する前に、データの送信または受信、あるいはその両方を段階的に停止したい場合に役立ちます。
具体的には、第一引数に操作対象のストリームリソース($stream
)を渡します。これはstream_socket_client()
やstream_socket_accept()
などによって返されたソケット接続のリソースです。第二引数($how
)には、停止するモードを数値で指定します。$how
に0
を指定すると受信(読み込み)を停止し、1
を指定すると送信(書き込み)を停止します。2
を指定した場合は、送受信の両方を停止します。
これにより、例えば、アプリケーションがすべてのデータを送信し終えた後、それ以上データを送信しないことを相手側に通知しつつ、まだ相手から送られてくる残りのデータを受信し続ける、といったきめ細やかな通信制御が可能になります。ただし、この関数はソケット自体を閉じるものではなく、送受信のチャンネルをシャットダウンするものです。完全にソケットリソースを解放するには、別途fclose()
関数などを使用する必要があります。処理が成功した場合はtrue
を、失敗した場合はfalse
を返します。
基本的な使い方
構文(syntax)
<?php
// TCPクライアントソケットを作成します。これはstream_socket_shutdownの最初の引数($stream)になります。
// 実際には存在しないポートへの接続例ですが、構文を示すためのものです。
$socket = stream_socket_client("tcp://localhost:12345", $errno, $errstr, 1);
if ($socket) {
// stream_socket_shutdown関数を呼び出し、ソケットの送信側のみをシャットダウンします。
// $socket: シャットダウンするストリームリソース
// STREAM_SHUT_WR (定数): 送信側(書き込み)をシャットダウンすることを指定します。
$success = stream_socket_shutdown($socket, STREAM_SHUT_WR);
// 必要に応じて、受信側もシャットダウンしたり、完全にソケットを閉じたりします。
// stream_socket_shutdown($socket, STREAM_SHUT_RD); // 受信側をシャットダウン
// stream_socket_shutdown($socket, STREAM_SHUT_RDWR); // 送信・受信の両方をシャットダウン
// ソケットを閉じます。
fclose($socket);
}
引数(parameters)
resource $stream, int $mode
- resource $stream: 閉じたいストリームリソースを指定します。
- int $mode: ストリームを閉じる方法を指定します。以下のいずれかの定数を使用します。
- STREAM_SHUT_RD: 読み取り専用を閉じます。
- STREAM_SHUT_WR: 書き込み専用を閉じます。
- STREAM_SHUT_RDWR: 読み取りと書き込みの両方を閉じます。
戻り値(return)
bool
stream_socket_shutdown関数は、指定されたソケットストリームの読み取り、書き込み、またはその両方をシャットダウンするために使用され、成功した場合はTRUE、失敗した場合はFALSEを返します。