PHP 8.1.0 Alpha 1 available for testing

stream_socket_shutdown

(PHP 5 >= 5.2.1, PHP 7, PHP 8)

stream_socket_shutdown全二重接続を終了する

説明

stream_socket_shutdown(resource $stream, int $mode): bool

全二重接続を (一時的あるいはそうでなく) 終了します。

注意:

関連するバッファの内容は、空になるかもしれないしならないかもしれません。

パラメータ

stream

オープンしているストリーム (たとえば stream_socket_client() でオープンしたものなど)。

mode

以下の定数のいずれか。STREAM_SHUT_RD (それ以降の受信を無効にする)、STREAM_SHUT_WR (それ以降の送信を無効にする) あるいは STREAM_SHUT_RDWR (それ以降の送受信を無効にする)。

返り値

成功した場合に true を、失敗した場合に false を返します。

例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($clientSTREAM_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)

参考

  • fclose() - オープンされたファイルポインタをクローズする

add a note add a note

User Contributed Notes 2 notes

up
2
Daniel J
5 months 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.
up
1
jgotti
8 years ago
Just a note to say that if you encounter problem closing some sockets using fclose in a multi client server, you should really  give this one a try.

Spent a full day trying to resolve this issue using stream_socket_shutdown($clientStream,STREAM_SHUT_RDWR);
finally do the trick.
To Top