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.stream_socket_shutdown
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
stream_socket_shutdown
Референца за `function.stream-socket-shutdown.php` со подобрена типографија и навигација.
stream_socket_shutdown
(PHP 5 >= 5.2.1, PHP 7, PHP 8)
stream_socket_shutdown — (PHP 5 >= 5.2.1, PHP 7, PHP 8)
= NULL
Затворање на full-duplex конекција
Забелешка:
Поврзаниот бафер, или бафери, може, но не мора да бидат испразнети.
Параметри
stream-
Затвора (делумно или не) full-duplex конекција. stream_socket_client()Отворен стрим (отворен со
mode-
Една од следниве константи:
STREAM_SHUT_RD, на пример)STREAM_SHUT_WR(оневозможи понатамошни приеми),STREAM_SHUT_RDWR(оневозможи понатамошни преноси) или
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Примери
ако е овозможен колекторот за отпадоци, stream_socket_shutdown() example
<?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")); // doesn't work now
?>Горниот пример ќе прикаже нешто слично на:
int(5) Notice: fputs(): send of 5 bytes failed with errno=32 Broken pipe in test.php on line 9 int(0)
Белешки од корисници 3 белешки
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.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.