(PHP 4 >= 4.1.0, PHP 5)
socket_shutdown — Schließt einen Socket der zum Senden, Empfangen oder beidem geöffnet wurde
Mit socket_shutdown() können Sie die Übertragungung hereinkommender, ausgehender oder aller Daten (die Standardeinstellung) über diesen socket abbrechen.
Ein gültiger Socket-Deskriptor, der von socket_create() erzeugt wurde.
Der Parameter how kann folgende Werte annehmen:
0 | 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 |
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
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.
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
?>
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.
Sockets should be first shutdown and then closed.
<?php
// Sample: Closing sockets gracefully
socket_shutdown($sock, 2);
socket_close($sock);
?>