Shutdown and SOL_TCP:
<?php
$a= socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_shutdown($a, 2)
?>
PHP Warning: socket_shutdown(): unable to shutdown socket [107]: Transport endpoint is not connected
Shutdown and SOL_UDP:
<?php
$a= socket_create(AF_INET, SOCK_STREAM, SOL_UDP);
socket_shutdown($a, 2)
?>
PHP Warning: socket_shutdown(): unable to shutdown socket [107]: Transport endpoint is not connected
Conclusion: if you are not actually connected, shutdown will fails with socket_error = 107, Transport endpoint is not connected. This is true for both TPC and UDP connection (which is suprising, UDP being a connectionless protocol). This is true no matter the value set for the how parameter.
socket_shutdown
(PHP 4 >= 4.1.0, PHP 5)
socket_shutdown — Schließt einen Socket der zum Senden, Empfangen oder beidem geöffnet wurde
Beschreibung
bool socket_shutdown
( resource
$socket
[, int $how = 2
] )
Mit socket_shutdown() können Sie die Übertragungung
hereinkommender, ausgehender oder aller Daten (die Standardeinstellung) über
diesen socket abbrechen.
Parameter-Liste
-
socket -
Ein gültiger Socket-Deskriptor, der von socket_create() erzeugt wurde.
-
how -
Der Parameter
howkann folgende Werte annehmen:Mögliche Werte für how0 Schließe den Socket für hereinkommende Daten (Lesen) 1 Schließe den Socket für ausgehende Daten (Schreiben) 2 Schließe den Socket in beiden Richtungen
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
recycling dot sp dot am at gmail dot com ¶
2 years ago
richard dot thomas at psysolutions dot com ¶
7 years ago
That is not a good example of a graceful shutdown. One should close the sending side of the socket and continue to read until the remote end closes its sending connection.
korvin at biz dot by ¶
4 years ago
Closing socket graceful
<?php
socket_shutdown($resHandle, 1);//remote host yet can read
usleep(500);//wait remote host
socket_shutdown($resHandle, 0);//close reading
socket_close($resHandle);//finaly we can free resource
?>
ludvig dot ericson at gmail dot com ¶
7 years ago
Sockets should be first shutdown and then closed.
<?php
// Sample: Closing sockets gracefully
socket_shutdown($sock, 2);
socket_close($sock);
?>
