-----Original Message-----
From: kenTk [mailto:[EMAIL PROTECTED] 
Sent: Saturday, November 01, 2008 10:41 PM
To: beginners@perl.org
Subject: Re: Reading from multiple sockets.

On Oct 30, 8:33 am, [EMAIL PROTECTED] (Kammen van) wrote:
> >>> From: Peter Scott [mailto:[EMAIL PROTECTED]
> >>> Subject: Re: Reading from multiple sockets.
>
> >> On Tue, 21 Oct 2008 12:53:53 +0200, Kammen van, Marco, Springer SBM
> NL
> >> wrote:
> >> I'm pretty new to working with sockets in perl, looked around for
> days
> >> for a proper solution for my IRC/DCC problem but couldn't find one.
> >>>Yeah I was planning to add another Perl programming book to my
> list....
> >>>Thanks for all hints so far... I've got the following to work now
> using
> >>>IO::Select
> >>>Properly send & receive to and from server.
> >>>I can esablish a DCC connection over additional socket, but then I
> only
> >>>get the data from the DCC socket, and no-longer the data from the
> server
> >>>socket, untill the DCC socket is closed.....
> >>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;
> >>    }
> >>  }
> >>}
>
>> It looked like it worked but keep ending up in some kind of lock....
>> As soon as the second socket kicks in things go wrong....
>> It's a shame there are tons of pieces of code for IRC thingies, but none
>> of a fully functional one including DCC connections.... (without using
>> additional modules).
>>
>> Any help in the right direction is appreciated...
>>
>> (and yes I'm still waiting on my Perl networking book!)

>This seems to come up regularly and there seems to be little accurate
>information on Non-Blocking sockets.
>The main problem is that the Blocking=>0 option doesn't work when
>creating the object.
>You have to do it as follows:

>$con = IO::Socket::INET->new(PeerAddr=>"$server",
 
>PeerPort=>"$port",
                             Proto=>'tcp',
>                             Timeout=>'30') || print "Error! $!\n";
># for Linux
>$con->blocking(0);

># For windoze
>my $temp = 1;
>ioctl ($con , 0x8004667E, \$temp);


>This works for both Listening (server) and client socket connections.
>You can leave both methods in the script  because windoze and Linux
>Don't complain.
> have used it for multiple client and server objects running
>simultaneously.
>You simply check for connections and data from them sequentially in a
>loop.

Hi Ken!

Thanks for the advice...... 
Added the $con->blocking(0); to both my listening and connecting sockets but 
still same result...
One socket is waiting for the other one :-(

 




--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to