• Publicidad

Problema Sockets

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema Sockets

Notapor Azrack » 2007-09-21 20:01 @876

Hola. Disculpen. Necesito ayuda con esto. Estoy programando un script para conectarme a un sitio pero el problema es que a veces no está activo el servidor y me preguntaba cómo puedo hacer para que si no conectara ahí vuelva a intentarlo otra vez y así hasta que conecte.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $send = new IO::Socket::INET (
                                 PeerAddr => "$server",
                                 PeerPort => "1200",
                                 Proto => "tcp",
                                );
die "No se puede abrir el socket, Motivo: $!\n" unless $send;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Azrack
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2007-04-14 13:42 @613

Publicidad

Notapor explorer » 2007-09-21 21:10 @923

Quizás... metiendo esas líneas dentro de un bucle, hasta que se cumpla que se ha creado la conexión. Y con una instrucción sleep parar evitar que el proceso consuma todos los recursos de la máquina.

Seguro que hay otras formas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2007-09-22 09:52 @452

Usando Socket.

Primero se define el protocolo, luego se crea el Socket (tipo AF_INET, SOCK_STREAM) y luego se hace un bucle, usando connect y sleep, y con un par de sub.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Socket;
my $proto = getrpotobyname('tcp');
socket(Socket, AF_INET, SOCK_STREAM, $proto);
sub Check {
  my $sitio = shift;
  my $add = inet_aton($sitio);
  my $sin = sockaddr_in($puerto, $add);
  if(connect(Socket, $sin)){
    Haces Algo...
  }
  sleep 1; #O el tiempo necesario
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Aunque esto depende de cómo quieras trabajar los errores.

Ahora, ¿por qué usar Socket y no IO::Socket?

IO::Socket es muy cómodo para ciertos hacks y programas, pero puede ser maluco para trabajar con este tipo de programas (mirar si tienes red, si X servidor está hábil o no).

Otra solución es usar Net::Ping.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

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

cron