Tengo una consulta conrespecto a el tema de sockets en PHP, logro mantener "viva" la conexion gracias a una funcion recursiva:
server.php
Código PHP :
class SocketServer{
   public $host;
    public $port;
   public $closed;
   public $event;
    public function __construct($vhost='127.0.0.1',$vport=2356){
        if(!preg_match("/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/",$vhost)){
            trigger_error('Invalid IP address format.',E_USER_ERROR);
        }else{ echo $vhost; }
        if(!is_int($vport)||$vport<1||$vport>65535){
            trigger_error('Invalid TCP port number.',E_USER_ERROR);
        }
        $this->host=$vhost;
        $this->port=$vport;
        $this->connect();
    }
    function connect(){
        set_time_limit(0);
        // create low level socket
        if(!$socket=socket_create(AF_INET,SOCK_STREAM,0)){
            trigger_error('Error creating new socket.',E_USER_ERROR);
        }
        // bind socket to TCP port
        if(!socket_bind($socket,$this->host,$this->port)){
            trigger_error('Error binding socket to TCP port.',E_USER_ERROR);
        }
        // begin listening connections
        if(!socket_listen($socket)){
            trigger_error('Error listening socket connections.',E_USER_ERROR);
        }
        // create communication socket
        if(!$comSocket=socket_accept($socket)){
            trigger_error('Error creating communication socket.',E_USER_ERROR);
        }
        // read socket input
        $socketInput=socket_read($comSocket,1024);
        // convert to uppercase socket input 
        $socketOutput=strtoupper(trim($socketInput))."n";
        // write data back to socket server
        if(!socket_write($comSocket,$socketOutput,strlen($socketOutput))){
            trigger_error('Error writing socket output',E_USER_ERROR);
        }
        // close sockets
        socket_close($comSocket);
      $this->event = $this->closeSocket($socket);
    }
   function closeSocket($sObj) {
      socket_close($sObj);
      return true;
   }
}
$loco =& new SocketServer();
keepAlive();
function keepAlive() {
   global $loco;
   if($loco->event == true) {
      $loco =& new SocketServer();
      keepAlive();
   }
}y este es:
client.php
Código PHP :
<?php
// check if form was submitted
if(isset($_POST['send'])){
   //include_once('server.php');
    // open client connection to TCP server
    if(!$fp=fsockopen('127.0.0.1',2356,$errstr,$errno,30)){
        trigger_error('Error opening socket',E_USER_ERROR);
    }
    $message=$_POST['message'];
    // write message to socket server
    fputs($fp,$message);
    // get server response
    $ret=fgets($fp,1024);
    // close socket connection
    fclose($fp);
    echo '<h1>You entered the following message in
lowercase :'.$ret.'</h1>';
    exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>TESTING TCP SOCKET SERVER</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
</head>
<body>
<h1>Enter your message here</h1>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="message" size="30" /><br />
<input type="submit" name="send" value="Send Value" />
</form>
</body>
</html>$event en la clase dispara true una vez que la conexion del socket se cierra entonces Keep alive verifica si se "produjo" el evento de cierre y vuelve a crear otro socket y este se mantiene a la espera de datos del cliente, una vez recibido se cierra y keepAlive se ejecuta de nuevo (funcion recursiva).
Ahora dato extra, una vez ejecutas server.php en tu navegador, LO CIERRAS, y puedes enviar con client.php las veces que quieras. Puedo crear otro evento para detenerlo, pero mi pregunta es: Este script puede generar algun daño al servidor?
