por Perl user » 2006-05-02 17:17 @762
Que tal,
Tu comentario si cambia totalmente el escenario. En el caso de HTTP no es TAN trivial pero tampoco TAN complejo. En el HTTP HEADER viene la longitud en bytes de la petición que hiciste, cuando leas del socket, leerás NBYTES ( te recomiendo un buffer de 16K) hacia el buffer que le indiques, lo que necesitas es ir checando cada segundo el contador de bytes que irás incrementando en cada llamada a sysread() y sacar el promedio/porcentaje.
Esto por supuesto, tiene que ser de manera concurrente, te recomendaría usar threads pero la implementación de threading en Perl es horrible, así que terminarás haciendolo con fork().
Lo que te recomiendo es... una vez que analices el header y obtengas la longitud del request, creas un proceso con fork, deja que el child process que creaste accese a el contador de bytes, y que el parent siga con la adquisición de datos, con esto cada que transcurra un segundo checas el contador y calculas el promedio/porcentaje, y también podrías calcular el tiempo restante de la transferencia, con la información obtenida.
Espero haberme dado a entender, Saludos.
Marco A. Manzo
[email protected]http://www.unixmonkeys.com/amnesiac/
Perl Programming Language