Usted habla de abrir un archivo, y preguntar acerca de IO::Socket
. Estas no son exactamente las mismas cosas, incluso si en el fondo vas a leer los datos de un descriptor de archivo.
Si puede acceder a la transmisión remota desde una tubería con nombre o FIFO, entonces puede simplemente abrirlo como un archivo ordinario. Bloqueará cuando no haya nada disponible y regresará siempre que haya datos que deban drenarse. Puede, o no, tener que llevar File::Tail
para abordar el problema de no perder datos si el remitente corre demasiado lejos de usted.
Por otro lado, si abre un socket directamente al otro servidor (lo que parece más probable), IO::Socket
no funcionará de la caja, ya que no hay un método getline
disponible. Tendría que leer y almacenar el bloque por bloque y distribuirlo línea por línea a través de un marcador intermedio.
Puede extraer el descriptor de socket en un IO::Handle
, y usar getline()
en eso.Algo así como:
my $sock = IO::Socket::INET->new(
PeerAddr => '172.0.0.1',
PeerPort => 1337,
Proto => 'tcp'
) or die $!;
my $io = new IO::Handle;
$io->fdopen(fileno($sock),"r") or die $!;
while (defined(my $data = $io->getline())) {
chomp $data;
# do something
}
Puede que tenga que realizar un apretón de manos con el fin de iniciar la recepción de paquetes, pero eso es otro asunto.
http://stackoverflow.com/questions/915926/perl-read-new-records-added-to-a-file/915989#915989 – innaM