【PHP8.x】stream_socket_shutdown関数の使い方

作成日: 更新日:

stream_socket_shutdown関数は、既存のストリームソケット接続の送受信機能を、指定した方向のみ停止するために使用される関数です。この関数は、TCP/IPなどのネットワーク通信において、完全に接続を終了する前に、データの送信または受信、あるいはその両方を段階的に停止したい場合に役立ちます。

具体的には、第一引数に操作対象のストリームリソース($stream)を渡します。これはstream_socket_client()stream_socket_accept()などによって返されたソケット接続のリソースです。第二引数($how)には、停止するモードを数値で指定します。$how0を指定すると受信(読み込み)を停止し、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を返します。

【PHP8.x】stream_socket_shutdown関数の使い方 | いっしー@Webエンジニア