ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.pm
Revision: 1.51
Committed: Sat Nov 24 16:12:37 2007 UTC (16 years, 5 months ago) by root
Branch: MAIN
Changes since 1.50: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.20 EV - perl interface to libev, a high performance full-featured event loop
4 root 1.1
5     =head1 SYNOPSIS
6    
7 root 1.11 use EV;
8    
9 root 1.20 # TIMERS
10 root 1.11
11     my $w = EV::timer 2, 0, sub {
12     warn "is called after 2s";
13     };
14    
15 root 1.35 my $w = EV::timer 2, 2, sub {
16     warn "is called roughly every 2s (repeat = 2)";
17 root 1.11 };
18    
19     undef $w; # destroy event watcher again
20    
21 root 1.30 my $w = EV::periodic 0, 60, 0, sub {
22 root 1.11 warn "is called every minute, on the minute, exactly";
23     };
24    
25     # IO
26    
27 root 1.20 my $w = EV::io *STDIN, EV::READ, sub {
28 root 1.35 my ($w, $revents) = @_; # all callbacks receive the watcher and event mask
29 root 1.20 warn "stdin is readable, you entered: ", <STDIN>;
30 root 1.11 };
31    
32     # SIGNALS
33    
34     my $w = EV::signal 'QUIT', sub {
35     warn "sigquit received\n";
36     };
37    
38 root 1.16 # CHILD/PID STATUS CHANGES
39    
40     my $w = EV::child 666, sub {
41 root 1.27 my ($w, $revents) = @_;
42     my $status = $w->rstatus;
43 root 1.16 };
44 root 1.11
45     # MAINLOOP
46 root 1.39 EV::loop; # loop until EV::unloop is called or all watchers stop
47 root 1.20 EV::loop EV::LOOP_ONESHOT; # block until at least one event could be handled
48     EV::loop EV::LOOP_NONBLOCK; # try to handle same events, but do not block
49 root 1.2
50 root 1.1 =head1 DESCRIPTION
51    
52 root 1.16 This module provides an interface to libev
53 root 1.20 (L<http://software.schmorp.de/pkg/libev.html>).
54 root 1.1
55     =cut
56    
57     package EV;
58    
59     use strict;
60    
61     BEGIN {
62 root 1.51 our $VERSION = '1.3';
63 root 1.1 use XSLoader;
64     XSLoader::load "EV", $VERSION;
65     }
66    
67 root 1.49 @EV::IO::ISA =
68 root 1.18 @EV::Timer::ISA =
69     @EV::Periodic::ISA =
70     @EV::Signal::ISA =
71     @EV::Idle::ISA =
72     @EV::Prepare::ISA =
73     @EV::Check::ISA =
74 root 1.17 @EV::Child::ISA = "EV::Watcher";
75 root 1.15
76 root 1.8 =head1 BASIC INTERFACE
77 root 1.1
78     =over 4
79    
80 root 1.8 =item $EV::DIED
81    
82     Must contain a reference to a function that is called when a callback
83     throws an exception (with $@ containing thr error). The default prints an
84     informative message and continues.
85    
86     If this callback throws an exception it will be silently ignored.
87    
88 root 1.20 =item $time = EV::time
89    
90     Returns the current time in (fractional) seconds since the epoch.
91    
92 root 1.2 =item $time = EV::now
93    
94 root 1.20 Returns the time the last event loop iteration has been started. This
95     is the time that (relative) timers are based on, and refering to it is
96     usually faster then calling EV::time.
97    
98 root 1.41 =item $method = EV::method
99 root 1.20
100     Returns an integer describing the backend used by libev (EV::METHOD_SELECT
101     or EV::METHOD_EPOLL).
102    
103     =item EV::loop [$flags]
104 root 1.2
105 root 1.20 Begin checking for events and calling callbacks. It returns when a
106 root 1.39 callback calls EV::unloop.
107 root 1.2
108 root 1.20 The $flags argument can be one of the following:
109 root 1.2
110 root 1.20 0 as above
111     EV::LOOP_ONESHOT block at most once (wait, but do not loop)
112     EV::LOOP_NONBLOCK do not block at all (fetch/handle events but do not wait)
113 root 1.2
114 root 1.39 =item EV::unloop [$how]
115 root 1.2
116 root 1.39 When called with no arguments or an argument of EV::UNLOOP_ONE, makes the
117     innermost call to EV::loop return.
118 root 1.2
119 root 1.39 When called with an argument of EV::UNLOOP_ALL, all calls to EV::loop will return as
120 root 1.20 fast as possible.
121 root 1.2
122 root 1.48 =item EV::once $fh_or_undef, $events, $timeout, $cb->($revents)
123 root 1.47
124     This function rolls together an I/O and a timer watcher for a single
125     one-shot event without the need for managing a watcher object.
126    
127     If C<$fh_or_undef> is a filehandle or file descriptor, then C<$events>
128     must be a bitset containing either C<EV::READ>, C<EV::WRITE> or C<EV::READ
129     | EV::WRITE>, indicating the type of I/O event you want to wait for. If
130     you do not want to wait for some I/O event, specify C<undef> for
131     C<$fh_or_undef> and C<0> for C<$events>).
132    
133     If timeout is C<undef> or negative, then there will be no
134     timeout. Otherwise a EV::timer with this value will be started.
135    
136     When an error occurs or either the timeout or I/O watcher triggers, then
137     the callback will be called with the received event set (in general
138     you can expect it to be a combination of C<EV:ERROR>, C<EV::READ>,
139     C<EV::WRITE> and C<EV::TIMEOUT>).
140    
141     EV::once doesn't return anything: the watchers stay active till either
142     of them triggers, then they will be stopped and freed, and the callback
143     invoked.
144    
145 root 1.20 =back
146    
147     =head2 WATCHER
148 root 1.2
149 root 1.20 A watcher is an object that gets created to record your interest in some
150     event. For instance, if you want to wait for STDIN to become readable, you
151     would create an EV::io watcher for that:
152    
153     my $watcher = EV::io *STDIN, EV::READ, sub {
154     my ($watcher, $revents) = @_;
155     warn "yeah, STDIN should not be readable without blocking!\n"
156     };
157 root 1.2
158 root 1.20 All watchers can be active (waiting for events) or inactive (paused). Only
159     active watchers will have their callbacks invoked. All callbacks will be
160     called with at least two arguments: the watcher and a bitmask of received
161     events.
162    
163     Each watcher type has its associated bit in revents, so you can use the
164     same callback for multiple watchers. The event mask is named after the
165     type, i..e. EV::child sets EV::CHILD, EV::prepare sets EV::PREPARE,
166     EV::periodic sets EV::PERIODIC and so on, with the exception of IO events
167     (which can set both EV::READ and EV::WRITE bits), and EV::timer (which
168     uses EV::TIMEOUT).
169    
170     In the rare case where one wants to create a watcher but not start it at
171     the same time, each constructor has a variant with a trailing C<_ns> in
172     its name, e.g. EV::io has a non-starting variant EV::io_ns and so on.
173    
174     Please note that a watcher will automatically be stopped when the watcher
175 root 1.23 object is destroyed, so you I<need> to keep the watcher objects returned by
176 root 1.20 the constructors.
177    
178 root 1.23 Also, all methods changing some aspect of a watcher (->set, ->priority,
179     ->fh and so on) automatically stop and start it again if it is active,
180     which means pending events get lost.
181    
182 root 1.20 =head2 WATCHER TYPES
183    
184     Now lets move to the existing watcher types and asociated methods.
185    
186     The following methods are available for all watchers. Then followes a
187     description of each watcher constructor (EV::io, EV::timer, EV::periodic,
188     EV::signal, EV::child, EV::idle, EV::prepare and EV::check), followed by
189     any type-specific methods (if any).
190    
191     =over 4
192 root 1.2
193 root 1.20 =item $w->start
194    
195     Starts a watcher if it isn't active already. Does nothing to an already
196     active watcher. By default, all watchers start out in the active state
197     (see the description of the C<_ns> variants if you need stopped watchers).
198    
199     =item $w->stop
200 root 1.2
201 root 1.20 Stop a watcher if it is active. Also clear any pending events (events that
202     have been received but that didn't yet result in a callback invocation),
203     regardless of wether the watcher was active or not.
204 root 1.2
205 root 1.20 =item $bool = $w->is_active
206 root 1.2
207 root 1.20 Returns true if the watcher is active, false otherwise.
208    
209 root 1.30 =item $current_data = $w->data
210    
211     =item $old_data = $w->data ($new_data)
212    
213     Queries a freely usable data scalar on the watcher and optionally changes
214     it. This is a way to associate custom data with a watcher:
215    
216     my $w = EV::timer 60, 0, sub {
217     warn $_[0]->data;
218     };
219     $w->data ("print me!");
220    
221 root 1.20 =item $current_cb = $w->cb
222    
223     =item $old_cb = $w->cb ($new_cb)
224    
225 root 1.23 Queries the callback on the watcher and optionally changes it. You can do
226     this at any time without the watcher restarting.
227    
228     =item $current_priority = $w->priority
229    
230     =item $old_priority = $w->priority ($new_priority)
231    
232     Queries the priority on the watcher and optionally changes it. Pending
233     watchers with higher priority will be invoked first. The valid range of
234 root 1.24 priorities lies between EV::MAXPRI (default 2) and EV::MINPRI (default
235     -2). If the priority is outside this range it will automatically be
236 root 1.23 normalised to the nearest valid priority.
237    
238 root 1.50 The default priority of any newly-created watcher is 0.
239    
240     Note that the priority semantics have not yet been fleshed out and are
241     subject to almost certain change.
242 root 1.20
243     =item $w->trigger ($revents)
244    
245     Call the callback *now* with the given event mask.
246    
247 root 1.50 =item $previous_state = $w->keepalive ($bool)
248    
249     Normally, C<EV::loop> will return when there are no active watchers
250     (which is a "deadlock" because no progress can be made anymore). This is
251     convinient because it allows you to start your watchers (and your jobs),
252     call C<EV::loop> once and when it returns you know that all your jobs are
253     finished (or they forgot to register some watchers for their task :).
254    
255     Sometimes, however, this gets in your way, for example when you the module
256     that calls C<EV::loop> (usually the main program) is not the same module
257     as a long-living watcher (for example a DNS client module written by
258     somebody else even). Then you might want any outstanding requests to be
259     handled, but you would not want to keep C<EV::loop> from returning just
260     because you happen to have this long-running UDP port watcher.
261    
262     In this case you can clear the keepalive status, which means that even
263     though your watcher is active, it won't keep C<EV::loop> from returning.
264    
265     The initial value for keepalive is true (enabled), and you cna change it
266     any time.
267    
268     Example: Register an IO watcher for some UDP socket but do not keep the
269     event loop from running just because of that watcher.
270    
271     my $udp_socket = ...
272     my $udp_watcher = EV::io $udp_socket, EV::READ, sub { ... };
273     $udp_watcher->keepalive (0);
274 root 1.20
275     =item $w = EV::io $fileno_or_fh, $eventmask, $callback
276 root 1.2
277 root 1.20 =item $w = EV::io_ns $fileno_or_fh, $eventmask, $callback
278 root 1.7
279 root 1.20 As long as the returned watcher object is alive, call the C<$callback>
280     when the events specified in C<$eventmask>.
281 root 1.2
282 root 1.20 The $eventmask can be one or more of these constants ORed together:
283 root 1.2
284     EV::READ wait until read() wouldn't block anymore
285     EV::WRITE wait until write() wouldn't block anymore
286 root 1.7
287 root 1.20 The C<io_ns> variant doesn't start (activate) the newly created watcher.
288 root 1.2
289 root 1.20 =item $w->set ($fileno_or_fh, $eventmask)
290 root 1.10
291 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be
292     called at any time.
293 root 1.10
294 root 1.20 =item $current_fh = $w->fh
295    
296     =item $old_fh = $w->fh ($new_fh)
297    
298     Returns the previously set filehandle and optionally set a new one.
299 root 1.10
300 root 1.20 =item $current_eventmask = $w->events
301    
302     =item $old_eventmask = $w->events ($new_eventmask)
303 root 1.10
304 root 1.20 Returns the previously set event mask and optionally set a new one.
305 root 1.10
306    
307 root 1.20 =item $w = EV::timer $after, $repeat, $callback
308 root 1.2
309 root 1.20 =item $w = EV::timer_ns $after, $repeat, $callback
310 root 1.2
311 root 1.20 Calls the callback after C<$after> seconds. If C<$repeat> is non-zero,
312     the timer will be restarted (with the $repeat value as $after) after the
313     callback returns.
314 root 1.2
315 root 1.20 This means that the callback would be called roughly after C<$after>
316 root 1.39 seconds, and then every C<$repeat> seconds. The timer does his best not
317     to drift, but it will not invoke the timer more often then once per event
318     loop iteration, and might drift in other cases. If that isn't acceptable,
319     look at EV::periodic, which can provide long-term stable timers.
320 root 1.2
321 root 1.39 The timer is based on a monotonic clock, that is, if somebody is sitting
322 root 1.20 in front of the machine while the timer is running and changes the system
323     clock, the timer will nevertheless run (roughly) the same time.
324 root 1.2
325 root 1.20 The C<timer_ns> variant doesn't start (activate) the newly created watcher.
326    
327     =item $w->set ($after, $repeat)
328    
329     Reconfigures the watcher, see the constructor above for details. Can be at
330     any time.
331    
332     =item $w->again
333    
334     Similar to the C<start> method, but has special semantics for repeating timers:
335    
336 root 1.39 If the timer is active and non-repeating, it will be stopped.
337    
338 root 1.20 If the timer is active and repeating, reset the timeout to occur
339     C<$repeat> seconds after now.
340    
341 root 1.39 If the timer is inactive and repeating, start it using the repeat value.
342 root 1.20
343     Otherwise do nothing.
344    
345     This behaviour is useful when you have a timeout for some IO
346     operation. You create a timer object with the same value for C<$after> and
347     C<$repeat>, and then, in the read/write watcher, run the C<again> method
348     on the timeout.
349    
350    
351 root 1.30 =item $w = EV::periodic $at, $interval, $reschedule_cb, $callback
352 root 1.20
353 root 1.30 =item $w = EV::periodic_ns $at, $interval, $reschedule_cb, $callback
354    
355     Similar to EV::timer, but is not based on relative timeouts but on
356     absolute times. Apart from creating "simple" timers that trigger "at" the
357     specified time, it can also be used for non-drifting absolute timers and
358     more complex, cron-like, setups that are not adversely affected by time
359     jumps (i.e. when the system clock is changed by explicit date -s or other
360     means such as ntpd). It is also the most complex watcher type in EV.
361    
362     It has three distinct "modes":
363    
364     =over 4
365 root 1.2
366 root 1.30 =item * absolute timer ($interval = $reschedule_cb = 0)
367 root 1.2
368 root 1.30 This time simply fires at the wallclock time C<$at> and doesn't repeat. It
369     will not adjust when a time jump occurs, that is, if it is to be run
370     at January 1st 2011 then it will run when the system time reaches or
371     surpasses this time.
372 root 1.2
373 root 1.30 =item * non-repeating interval timer ($interval > 0, $reschedule_cb = 0)
374 root 1.2
375 root 1.30 In this mode the watcher will always be scheduled to time out at the
376     next C<$at + N * $interval> time (for some integer N) and then repeat,
377     regardless of any time jumps.
378    
379     This can be used to create timers that do not drift with respect to system
380     time:
381    
382     my $hourly = EV::periodic 0, 3600, 0, sub { print "once/hour\n" };
383    
384     That doesn't mean there will always be 3600 seconds in between triggers,
385     but only that the the clalback will be called when the system time shows a
386     full hour (UTC).
387 root 1.2
388 root 1.7 Another way to think about it (for the mathematically inclined) is that
389 root 1.30 EV::periodic will try to run the callback in this mode at the next
390     possible time where C<$time = $at (mod $interval)>, regardless of any time
391     jumps.
392    
393     =item * manual reschedule mode ($reschedule_cb = coderef)
394    
395 root 1.37 In this mode $interval and $at are both being ignored. Instead, each
396     time the periodic watcher gets scheduled, the reschedule callback
397     ($reschedule_cb) will be called with the watcher as first, and the current
398     time as second argument.
399 root 1.30
400 root 1.31 I<This callback MUST NOT stop or destroy this or any other periodic
401     watcher, ever>. If you need to stop it, return 1e30 and stop it
402     afterwards.
403 root 1.30
404     It must return the next time to trigger, based on the passed time value
405     (that is, the lowest time value larger than to the second argument). It
406     will usually be called just before the callback will be triggered, but
407     might be called at other times, too.
408    
409     This can be used to create very complex timers, such as a timer that
410     triggers on each midnight, local time (actually 24 hours after the last
411     midnight, to keep the example simple. If you know a way to do it correctly
412     in about the same space (without requiring elaborate modules), drop me a
413     note :):
414    
415     my $daily = EV::periodic 0, 0, sub {
416     my ($w, $now) = @_;
417    
418     use Time::Local ();
419     my (undef, undef, undef, $d, $m, $y) = localtime $now;
420     86400 + Time::Local::timelocal 0, 0, 0, $d, $m, $y
421     }, sub {
422     print "it's midnight or likely shortly after, now\n";
423     };
424 root 1.7
425 root 1.30 =back
426 root 1.20
427     The C<periodic_ns> variant doesn't start (activate) the newly created watcher.
428 root 1.2
429 root 1.30 =item $w->set ($at, $interval, $reschedule_cb)
430 root 1.11
431 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be at
432     any time.
433    
434 root 1.30 =item $w->again
435    
436     Simply stops and starts the watcher again.
437    
438 root 1.20
439     =item $w = EV::signal $signal, $callback
440    
441     =item $w = EV::signal_ns $signal, $callback
442 root 1.11
443     Call the callback when $signal is received (the signal can be specified
444 root 1.20 by number or by name, just as with kill or %SIG).
445 root 1.2
446 root 1.11 EV will grab the signal for the process (the kernel only allows one
447 root 1.20 component to receive a signal at a time) when you start a signal watcher,
448     and removes it again when you stop it. Perl does the same when you
449     add/remove callbacks to %SIG, so watch out.
450    
451     You can have as many signal watchers per signal as you want.
452 root 1.2
453 root 1.20 The C<signal_ns> variant doesn't start (activate) the newly created watcher.
454 root 1.2
455 root 1.20 =item $w->set ($signal)
456 root 1.2
457 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be at
458     any time.
459    
460 root 1.22 =item $current_signum = $w->signal
461    
462     =item $old_signum = $w->signal ($new_signal)
463    
464     Returns the previously set signal (always as a number not name) and
465     optionally set a new one.
466    
467 root 1.20
468     =item $w = EV::child $pid, $callback
469    
470     =item $w = EV::child_ns $pid, $callback
471    
472     Call the callback when a status change for pid C<$pid> (or any pid
473     if C<$pid> is 0) has been received. More precisely: when the process
474     receives a SIGCHLD, EV will fetch the outstanding exit/wait status for all
475     changed/zombie children and call the callback.
476    
477 root 1.27 You can access both status and pid by using the C<rstatus> and C<rpid>
478     methods on the watcher object.
479 root 1.20
480     You can have as many pid watchers per pid as you want.
481    
482     The C<child_ns> variant doesn't start (activate) the newly created watcher.
483    
484     =item $w->set ($pid)
485 root 1.1
486 root 1.20 Reconfigures the watcher, see the constructor above for details. Can be at
487     any time.
488 root 1.2
489 root 1.22 =item $current_pid = $w->pid
490    
491     =item $old_pid = $w->pid ($new_pid)
492    
493     Returns the previously set process id and optionally set a new one.
494    
495 root 1.27 =item $exit_status = $w->rstatus
496    
497     Return the exit/wait status (as returned by waitpid, see the waitpid entry
498     in perlfunc).
499    
500     =item $pid = $w->rpid
501    
502     Return the pid of the awaited child (useful when you have installed a
503     watcher for all pids).
504    
505 root 1.2
506 root 1.20 =item $w = EV::idle $callback
507 root 1.2
508 root 1.20 =item $w = EV::idle_ns $callback
509 root 1.2
510 root 1.20 Call the callback when there are no pending io, timer/periodic, signal or
511     child events, i.e. when the process is idle.
512 root 1.2
513 root 1.20 The process will not block as long as any idle watchers are active, and
514     they will be called repeatedly until stopped.
515 root 1.2
516 root 1.20 The C<idle_ns> variant doesn't start (activate) the newly created watcher.
517 root 1.2
518    
519 root 1.20 =item $w = EV::prepare $callback
520 root 1.1
521 root 1.20 =item $w = EV::prepare_ns $callback
522 root 1.1
523 root 1.20 Call the callback just before the process would block. You can still
524     create/modify any watchers at this point.
525 root 1.1
526 root 1.20 See the EV::check watcher, below, for explanations and an example.
527 root 1.2
528 root 1.20 The C<prepare_ns> variant doesn't start (activate) the newly created watcher.
529 root 1.2
530    
531 root 1.20 =item $w = EV::check $callback
532 root 1.2
533 root 1.20 =item $w = EV::check_ns $callback
534 root 1.10
535 root 1.20 Call the callback just after the process wakes up again (after it has
536     gathered events), but before any other callbacks have been invoked.
537 root 1.10
538 root 1.20 This is used to integrate other event-based software into the EV
539     mainloop: You register a prepare callback and in there, you create io and
540     timer watchers as required by the other software. Here is a real-world
541     example of integrating Net::SNMP (with some details left out):
542 root 1.10
543 root 1.20 our @snmp_watcher;
544 root 1.2
545 root 1.20 our $snmp_prepare = EV::prepare sub {
546     # do nothing unless active
547     $dispatcher->{_event_queue_h}
548     or return;
549 root 1.2
550 root 1.20 # make the dispatcher handle any outstanding stuff
551 root 1.45 ... not shown
552 root 1.2
553 root 1.20 # create an IO watcher for each and every socket
554     @snmp_watcher = (
555     (map { EV::io $_, EV::READ, sub { } }
556     keys %{ $dispatcher->{_descriptors} }),
557 root 1.45
558     EV::timer +($event->[Net::SNMP::Dispatcher::_ACTIVE]
559     ? $event->[Net::SNMP::Dispatcher::_TIME] - EV::now : 0),
560     0, sub { },
561 root 1.20 );
562     };
563 root 1.2
564 root 1.45 The callbacks are irrelevant (and are not even being called), the
565     only purpose of those watchers is to wake up the process as soon as
566     one of those events occurs (socket readable, or timer timed out). The
567     corresponding EV::check watcher will then clean up:
568 root 1.2
569 root 1.20 our $snmp_check = EV::check sub {
570     # destroy all watchers
571     @snmp_watcher = ();
572 root 1.2
573 root 1.20 # make the dispatcher handle any new stuff
574 root 1.45 ... not shown
575 root 1.20 };
576 root 1.2
577 root 1.20 The callbacks of the created watchers will not be called as the watchers
578     are destroyed before this cna happen (remember EV::check gets called
579     first).
580 root 1.2
581 root 1.20 The C<check_ns> variant doesn't start (activate) the newly created watcher.
582 root 1.1
583     =back
584    
585 root 1.13 =head1 THREADS
586    
587 root 1.45 Threads are not supported by this module in any way. Perl pseudo-threads
588 root 1.46 is evil stuff and must die. As soon as Perl gains real threads I will work
589     on thread support for it.
590    
591     =head1 FORK
592    
593     Most of the "improved" event delivering mechanisms of modern operating
594     systems have quite a few problems with fork(2) (to put it bluntly: it is
595     not supported and usually destructive). Libev makes it possible to work
596     around this by having a function that recreates the kernel state after
597     fork in the child.
598    
599     On non-win32 platforms, this module requires the pthread_atfork
600     functionality to do this automatically for you. This function is quite
601     buggy on most BSDs, though, so YMMV. The overhead for this is quite
602     negligible, because everything the function currently does is set a flag
603     that is checked only when the event loop gets used the next time, so when
604     you do fork but not use EV, the overhead is minimal.
605    
606     On win32, there is no notion of fork so all this doesn't apply, of course.
607 root 1.13
608 root 1.1 =cut
609    
610 root 1.8 our $DIED = sub {
611     warn "EV: error in callback (ignoring): $@";
612     };
613    
614 root 1.28 default_loop
615 root 1.26 or die 'EV: cannot initialise libev backend. bad $ENV{LIBEV_METHODS}?';
616 root 1.1
617     1;
618    
619 root 1.3 =head1 SEE ALSO
620    
621 root 1.40 L<EV::DNS>.
622 root 1.3
623 root 1.1 =head1 AUTHOR
624    
625     Marc Lehmann <schmorp@schmorp.de>
626     http://home.schmorp.de/
627    
628     =cut
629