ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Net-IRC-Server/samples/ircsrv1
Revision: 1.3
Committed: Fri Jan 14 17:01:54 2005 UTC (21 years, 2 months ago) by elmex
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -1 lines
Log Message:
documentations, minor improvements

File Contents

# User Rev Content
1 elmex 1.1 #!/usr/bin/perl
2     use IO::Select;
3     use IO::Socket::INET;
4     use Net::IRC::Server;
5     use Data::Dumper;
6    
7 elmex 1.2 my $iserv = Net::IRC::Server->new (srv_prefix => "this.de");
8 elmex 1.1
9     my $sock = IO::Socket::INET->new(
10     Listen => 5,
11     LocalAddr => 'localhost',
12     LocalPort => 6667,
13     Proto => 'tcp',
14     ReuseAddr => 1);
15    
16     if (!$sock) { die "Couldn't get listening socket: $!\n" }
17    
18     $sock->listen ();
19    
20     $iserv->set_send_cb (sub {
21     my ($cl, $data) = @_;
22     $cl->{socket}->syswrite ($data);
23     print "send $cl->{nickname}> $data"
24     });
25    
26     my $s = IO::Select->new ();
27    
28     my %clients;
29     $s->add ($sock);
30    
31     while ((@ready = $s->can_read (1000))) {
32     for (@ready) {
33     if ($_ eq $sock) {
34     my $newfh = $_->accept ();
35     $s->add ($newfh);
36     my $addr = $newfh->sockaddr ();
37     $clients{$newfh} = { hostname => inet_ntoa ($addr), socket => $newfh };
38    
39     } else {
40     if (not defined $clients{$_}) {
41     $s->remove ($_);
42     $_->close ();
43     }
44    
45     my $data;
46     my $c = $_->sysread ($data, 2048);
47    
48     if ($c == 0) {
49     $s->remove ($_);
50     $_->close ();
51    
52     } else {
53     print "recv $clients{$_}->{nickname}> $data";
54 elmex 1.3 $iserv->feed_irc_data ($clients{$_}, $data);
55 elmex 1.1 }
56     }
57     }
58     }