How can a PHP socket server be designed to allow for proper closing of sockets from client requests?

When a client sends a request to close the socket connection, the PHP socket server needs to handle this request properly to close the socket in a safe and efficient manner. One way to achieve this is by implementing a protocol where the client can send a specific message to indicate its intention to close the connection. Upon receiving this message, the server can then gracefully close the socket.

<?php
// Create a socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '127.0.0.1', 8888);
socket_listen($socket);

// Accept incoming connections
$client = socket_accept($socket);

// Receive data from client
$data = socket_read($client, 1024);

// Check if client wants to close the connection
if ($data == 'CLOSE') {
    // Send a response
    socket_write($client, 'Closing connection');

    // Close the socket
    socket_close($client);
} else {
    // Handle other requests from client
}

// Close the main socket
socket_close($socket);
?>