My opinion on threads is, if you're not sure exactly why you're choosing them, don't.
What I use for networking interfaces that need to be powerful is IO::Select and Tie::RefHash. Here is an example:
#!/usr/bin/perl use strict; use warnings; use IO::Socket; use IO::Select; use Tie::RefHash; my ( %connections ); tie %connections, qw( Tie::RefHash ); # so we can use refs as hash key +s my $server = IO::Socket::INET->new( Listen => SOMAXCONN, LocalPort => $opts{port}, Reuse => 1, Proto => 'tcp', ) or die "can't open connection: $!"; $server->blocking( 0 ); my $select = IO::Select->new( $server ); while('eternity'){ foreach my $con ( $select->can_read(1) ) { #another way is to let it block, instead of passing can_read a tim +eout, but I usually need to check state, maybe send new output, so I +need to loop often if ( $con == $server ) { # looks like we have a new user connection $client->blocking( 0 ); $select->add( $client ); #whatever you want to store about the client can go in the + value, I like using a hashref so I'm not limited $connections{$client}{ip} = $client->peerhost; } elsif ( exists $connections{$con} ) { # I guess it's a connected user sending us data ... } else { #whoops, unknown filehandlw } }
An excellent example of Tie::RefHash and IO::Select can be found in the Perl IRC Daemon.
--
Snazzy tagline here
In reply to Re: Threads, Forks, or Nothing?
by Aighearach
in thread Threads, Forks, or Nothing?
by rapier1
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |