Alternativa correcta (socket daemon)

Hector Salinas hsalinas en bsf.cl
Vie Ene 23 16:02:50 CLST 2009


Alvaro Herrera escribió:
> 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);
> ?>
> 

ok, estube testieando este script y sigo con el drama del
incremento de memory, creo debe ser al bug de las funciones socket*











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