PHPerKaigi 2021

stream_socket_shutdown

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

stream_socket_shutdownArrête une connexion full-duplex

Description

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

Arrête (partiellement ou non) une connexion full-duplex.

Note:

Le ou les buffers associés peuvent ou non être vidés.

Liste de paramètres

stream

Un flux ouvert (ouvert avec la fonction stream_socket_client(), par exemple)

mode

Une des constantes suivantes : STREAM_SHUT_RD (désactive les réceptions futures), STREAM_SHUT_WR (désactive les transmissions futures) ou STREAM_SHUT_RDWR (désactive les réceptions ou les transmissions futures).

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

Exemple #1 Exemple avec 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"Bonjour"));

stream_socket_shutdown($clientSTREAM_SHUT_WR);
var_dump(fputs($client"Bonjour")); // ne fonctionne actuellement pas

?>

Résultat de l'exemple ci-dessus est similaire à :

int(5)

Notice: fputs(): send of 5 bytes failed with errno=32 Broken pipe in test.php on line 9
int(0)

Voir aussi

add a note add a note

User Contributed Notes 2 notes

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.
up
1
Daniel J
1 month 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.
To Top