Alternativa correcta (socket daemon)

Alvaro Herrera alvherre en alvh.no-ip.org
Vie Ene 23 15:15:31 CLST 2009


Hector Salinas escribió:

> #!/usr/bin/php -q
> <?php
> set_time_limit (0);
> $address = '192.168.1.235';
> $port = 5000;
> $sock = socket_create(AF_INET, SOCK_STREAM, 0);
> socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, SOL_TCP);
> socket_bind($sock, $address, $port) or die('error bind en la ip');
> socket_listen($sock);
> while (true)
> {
>         $client = socket_accept($sock);
>         socket_getpeername($client, $ip);
>         $input = socket_read($client, 10);
>         echo "\n*******************************";
>         echo "\nNew client connected: {$ip}";
>         echo "\nmemoria usada -->".memory_get_usage();
>         socket_write($client, "A");
>         unset($client);
>         unset($input);
>         $contador++;
> }
> socket_close($sock);
> ?>

Hmm, leyendo la pagina sobre variables en el manual de PHP te
recomendaria que pusieras las variables que son "locales" dentro de una
funcion.  No queda para nada claro que la memoria se libere al hacer un
"unset".  O sea, algo asi:

#!/usr/bin/php -q
<?php

function do_client_stuff( ... )
{
         $client = socket_accept($sock);
         socket_getpeername($client, $ip);
         $input = socket_read($client, 10);
         echo "\n*******************************";
         echo "\nNew client connected: {$ip}";
         socket_write($client, "A");
	socket_close($client);
}

 set_time_limit (0);
 $address = '192.168.1.235';
 $port = 5000;
 $sock = socket_create(AF_INET, SOCK_STREAM, 0);
 socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, SOL_TCP);
 socket_bind($sock, $address, $port) or die('error bind en la ip');
 socket_listen($sock);
 while (true)
 {
          do_client_stuff($sock);
         $contador++;
         echo "\nmemoria usada -->".memory_get_usage();
 }
 socket_close($sock);
?>

-- 
Alvaro Herrera                               http://www.PlanetPostgreSQL.org/
"I think my standards have lowered enough that now I think 'good design'
is when the page doesn't irritate the living f*ck out of me." (JWZ)


Más información sobre la lista de distribución Linux