stream_socket_shutdown
(PHP 5 >= 5.2.1, PHP 7, PHP 8)
stream_socket_shutdown — 全二重接続を終了する
説明
全二重接続を (一時的あるいはそうでなく) 終了します。
注意:
関連するバッファの内容は、空になるかもしれないしならないかもしれません。
パラメータ
stream
-
オープンしているストリーム (たとえば stream_socket_client() でオープンしたものなど)。
mode
-
以下の定数のいずれか。
STREAM_SHUT_RD
(それ以降の受信を無効にする)、STREAM_SHUT_WR
(それ以降の送信を無効にする) あるいはSTREAM_SHUT_RDWR
(それ以降の送受信を無効にする)。
例
例1 stream_socket_shutdown() の例
<?php
$server = stream_socket_server('tcp://127.0.0.1:1337');
$client = stream_socket_client('tcp://127.0.0.1:1337');
var_dump(fputs($client, "hello"));
stream_socket_shutdown($client, STREAM_SHUT_WR);
var_dump(fputs($client, "hello")); // ここでは動作しません
?>
上の例の出力は、 たとえば以下のようになります。
int(5) Notice: fputs(): send of 5 bytes failed with errno=32 Broken pipe in test.php on line 9 int(0)
+add a note
User Contributed Notes 3 notes
Daniel J ¶
3 years ago
Be wary of using stream_socket_shutdown with a TLS socket. The socket is closed without sending the "close_notify" message required by TLS protocol.
To correctly close a TLS socket, use fclose() instead, which internally calls OpenSSL's SSL_shutdown() function.
Anonymous ¶
3 years ago
As Daniel J has pointed out, stream_socket_shutdown doesn't send the TLS close_notify message. In some instances, it's a preferred function over fclose (to trigger stream_select, for example).
To use this function correctly with TLS, use stream_socket_enable_crypto($fp, false); before shutting down the socket.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google