in reply to Re^2: Reading from multiple sockets
in thread Reading from multiple sockets

Never mind... I think i fixed it....
Dunno if its the proper way but hey it works!!!!!!!!!
$con = IO::Socket::INET->new(PeerAddr=>"$server", PeerPort=>"$port", Proto=>'tcp', Timeout=>'30') || print "Error! $!\n"; $select = IO::Select->new(); $select->add($con); while(@ready = $select->can_write) { for $socket (@ready) { #The DCC Connection if($socket == $dcc) { $talk = <$dcc>; print $talk; #The Server Connection } elsif ($socket == $con) { $answer = <$con>; print $answer; # Stufff if ($answer =~ /:(.*)\!.* PRIVMSG $me :\001DCC CHAT chat (\d+) ( +\d+)\001\r\n/) { print "Received dcc from $1 with $2 and $3\n"; $dcc = IO::Socket::INET->new(PeerAddr=>"$2", PeerPort=>"$3", Proto=>'tcp', Timeout=>'30') || print "Error! + $!\n"; print $dcc "Please Enter Your Password!\n"; $select->add($dcc); } } else { print "Dunno?\n"; exit 1; } } }

Replies are listed 'Best First'.
Re^4: Reading from multiple sockets
by zentara (Cardinal) on Oct 23, 2008 at 13:36 UTC
    If you are having problems with only getting one socket, maybe your
    while(@ready = $select->can_write) {.....}
    is the wrong while test. Maybe you want to add those that can_read too? If you search google and groups.google for socket examples, you will find they vary depending on code design, but they usually use can_read, or sometimes a while(1){} with can_read and can_write handled in differentl code blocks in the while(1) loop. Just a guess. :-)

    Additionally, IO::Socket has a $sock->connected method that is a useful test to use in a while(1) loop.


    I'm not really a human, but I play one on earth Remember How Lucky You Are