Estaba creando un programa que enviara la misma información conectándose dos veces simultáneamente a un servidor a través del puerto http (80) pero al intentarlo se conecta el primero y después el segundo. ¿Alguna idea?
Sí, el programa que has hecho es lineal (al parecer).
Tienes que usar (como mínimo) fork(), de lo contrario no sería simultaneo (primero hace una conexión y al terminal hace la otra). Tienes que crear un proceso hijo (o más) para poder hacer eso o usar Threads.
La idea era crear un número de conexiones simultáneas donde se realiza una petición idéntica una a la otra sin que se desconecten al terminar la petición. Leí una función llamada createsocket o algo así para cargar en memoria sockets y utilizarlas como si fueran index
No estás creando conexiones simultáneas sino al contrario, creas una sola conexón "lineal" (solo puedes mandar un dato a la vez).
Lo que tenes que hacer es crear varias conexiones para mandar los datos simultaneamente (es decir, usar fork o Threads.pm) teiendo cuidado de no crear un DoS.
Realmente lo veo peligroso ya que mi PC podría colapsar al utilizar el programa muchas veces. Hay un programa en Visual Basic que carga sockets en memoria con load.winsock(x) y después winsock(x).connect senddata y si le doy while de 3, entonces se conectan los tres y envía tres paquetes idénticos al mismo tiempo sin que un socket afecte al otro y todo desde un solo control. ¿Podría hacerse esto en Perl? ya que no veo muy productivo crear más procesos para resolver un problema :-/
Si lo había intentado de esa forma pero tendría que esperar a que se desconecte la primera conexión para comenzar la segunda y la idea es conectar ambas sin depender una de la otra.
# create a tcp connection to the specified host and port $handle= IO::Socket::INET->new(Proto =>"tcp",
PeerAddr =>$host,
PeerPort =>$port) ordie"can't connect to port $port on $host: $!";
$handle->autoflush(1);# so output gets there right away
printSTDERR"[Connected to $host:$port]\n";
# split the program into two processes, identical twins die"can't fork: $!"unlessdefined($kidpid=fork());
if($kidpid){ # parent copies the socket to standard output while(defined($line=<$handle>)){ printSTDOUT$line; } kill("TERM"=>$kidpid);# send SIGTERM to child } else{ # child copies standard input to the socket while(defined($line=<STDIN>)){ print$handle$line; } } exit;
Cuando pruebo en mi servidor me aparece una sola conexión activa y lo que quiero es que aparezcan dos sin que se desconecten... así ninguna dependería de la otra.