• Publicidad

Función sysread

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Función sysread

Notapor scoop6 » 2006-11-26 09:35 @441

Hola,
Estoy implementando en perl una aplicación cliente/servidor.

Para mandar datos entre el cliente y el servidor utilizo
syswrite Socket, $var, Length. ,

y para recibir utilizo la función sysread Socket , $var, length

El problema que tengo es que hay veces, cuando la cantidad de datos es grande, que la función sysread no lee todos los datos que se han enviado.
¿Alguien me puede ayudar, para obtener los datos correctamente?

Gracias
Saludos
scoop6
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2006-11-26 09:26 @435

Publicidad

Notapor explorer » 2006-11-26 11:07 @505

Bienvenido a los foros de Perl en Español.

Si sysread debe leer más datos que lo que indica la longitud del buffer, lo normal es hacer ese proceso de lectura dentro de un bucle... pero entonces tenemos un problema: ¿hasta cuando debe durar ese bucle? Si ejecutamos un sysread en un handle que no tiene nada que entregarnos, el programa se quedará allí hasta que lo haya (es un proceso bloqueante). Lo que sólo necesitamos saber es si hay o no caracteres que leer.

Una de las formas de saberlo es usando la función select, que indicará qué handles tienen algún pendiente de ser leído o escrito.

Quizás sea más cómodo usar IO::Socket e IO::Select.

Network Programming with Perl|Linux Journal.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2006-11-26 17:38 @776

Otra opción es abrir el handle en modo no bloqueante. Al hacer el sysread, si devuelve undef, y en $! devuelve EWOULDBLOCK, entonces indica que no hay nada más que leer.

Comunicación Bidireccional con Pipes con Nombre. El uso de Select.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados