Here is a very simple example socket server, using the concepts discussed in this tutorial.

<?php

set_time_limit
(0);

define('LINESIZE'1024);
define('PORT'1053);    
define('MAXCLIENTS'5); 

function 
killDaemon()
{
    global 
$listenfd$client;

    
socket_close($listenfd);

    
$msg "Shutting Down...\n";
    
$msg_len strlen ($msg);

    for (
$i 0$i MAXCLIENTS$i++) {
        if (
$client[$i] != null) {
            
socket_write($client[$i], $msg$msg_len);
            
socket_close($client[$i]);
        }
    }

    exit();
}

function 
closeClient($i)
{
    global 
$client$remote_host$remote_port;
    
    
socket_close($client[$i]);
    
$client[$i] = null;
    unset(
$remote_host[$i]);
    unset(
$remote_port[$i]);
}


$listenfd socket_create (AF_INETSOCK_STREAM0);
if (! 
$listenfd) {
    die (
"Couldn't create socket!");
}

socket_set_option ($listenfdSOL_SOCKETSO_REUSEADDR1);

if (!
socket_bind ($listenfd"0.0.0.0"PORT)) {
    
socket_close ($listenfd);
    die (
'Cannot bind to port ' PORT " and address 0.0.0.0\n");
}

socket_listen ($listenfd10);

$maxi = -1;
for (
$i 0$i MAXCLIENTS$i++) {
    
$client[$i] = null;
}

while(
1) {
    
$rfds[0] = $listenfd;

    for (
$i 0$i FD_SETSIZE$i++) {
        if (
$client[$i] != null) {
            
$rfds[$i 1] = $client[$i];
        }
    }


    
$nready socket_select($rfds$null$nullnull);
    if (
in_array($listenfd$rfds)) {
        for (
$i 0$i FD_SETSIZE$i++) {
            if (
$client[$i] == null) {
                
$client[$i] = socket_accept($listenfd);
                
socket_set_option ($client[$i], 
                                   
SOL_SOCKETSO_REUSEADDR
                                   
1);
                
socket_getpeername($client[$i], 
                                   
$remote_host[$i], 
                                   
$remote_port[$i]);
                break;
            }

            if (
$i == FD_SETSIZE 1) {
                
trigger_error("too many clients"E_USER_ERROR);
                exit ();
            }
        }

        if (
$i $maxi) {
            
$maxi $i;
        }

        if (--
$nready <= 0) {
            continue;
        }
    }


    
// check the clients for incoming data.

    
for ($i 0$i <= $maxi$i++) {
        if (
$client[$i] == null)
            continue;

        if (
in_array($client[$i], $rfds)) {
            
$n trim(socket_read($client[$i], LINESIZE));

            if (!
$n) {
                
closeClient($i);
            } else {
                switch (
$n) {
                case 
'/kill':
                    
killDaemon();
                    break;
                case 
'/quit':
                    
closeClient($i);
                    break;
                default:
                    for (
$j 0$j <= $maxi$j++) {
                        if (
$client[$j] != null) {
                            
socket_write($client[$j], 
                                         
"From client[$i]: $n\r\n");
                        }
                    }
                    break;
                }
            }

            if  (--
$nready <= 0) {
                break;
            }
        }
    }
}

/**
 * Local Variables:
 * c-basic-offset: 4
 * tab-width: 4
 * End:
 */

?>