#!/usr/bin/perl use IO::Select; use IO::Socket::INET; use Net::IRC::Server; use Data::Dumper; my $iserv = Net::IRC::Server->new (srv_prefix => "this.de"); my $sock = IO::Socket::INET->new( Listen => 5, LocalAddr => 'localhost', LocalPort => 6667, Proto => 'tcp', ReuseAddr => 1); if (!$sock) { die "Couldn't get listening socket: $!\n" } $sock->listen (); $iserv->set_send_cb (sub { my ($cl, $data) = @_; $cl->{socket}->syswrite ($data); print "send $cl->{nickname}> $data" }); my $s = IO::Select->new (); my %clients; $s->add ($sock); while ((@ready = $s->can_read (1000))) { for (@ready) { if ($_ eq $sock) { my $newfh = $_->accept (); $s->add ($newfh); my $addr = $newfh->sockaddr (); $clients{$newfh} = { hostname => inet_ntoa ($addr), socket => $newfh }; } else { if (not defined $clients{$_}) { $s->remove ($_); $_->close (); } my $data; my $c = $_->sysread ($data, 2048); if ($c == 0) { $s->remove ($_); $_->close (); } else { print "recv $clients{$_}->{nickname}> $data"; $iserv->parse_irc_stream ($clients{$_}, $data); } } } }