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 (19 years, 4 months ago) by elmex
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -1 lines
Log Message:
documentations, minor improvements

File Contents

# Content
1 #!/usr/bin/perl
2 use IO::Select;
3 use IO::Socket::INET;
4 use Net::IRC::Server;
5 use Data::Dumper;
6
7 my $iserv = Net::IRC::Server->new (srv_prefix => "this.de");
8
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 $iserv->feed_irc_data ($clients{$_}, $data);
55 }
56 }
57 }
58 }