This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
One more typo, reported by H.Merijn Brand
[perl5.git] / pod / perlipc.pod
1 =head1 NAME
2
3 perlipc - Perl interprocess communication (signals, fifos, pipes, safe subprocesses, sockets, and semaphores)
4
5 =head1 DESCRIPTION
6
7 The basic IPC facilities of Perl are built out of the good old Unix
8 signals, named pipes, pipe opens, the Berkeley socket routines, and SysV
9 IPC calls.  Each is used in slightly different situations.
10
11 =head1 Signals
12
13 Perl uses a simple signal handling model: the %SIG hash contains names
14 or references of user-installed signal handlers.  These handlers will
15 be called with an argument which is the name of the signal that
16 triggered it.  A signal may be generated intentionally from a
17 particular keyboard sequence like control-C or control-Z, sent to you
18 from another process, or triggered automatically by the kernel when
19 special events transpire, like a child process exiting, your own process
20 running out of stack space, or hitting a process file-size limit.
21
22 For example, to trap an interrupt signal, set up a handler like this:
23
24     our $shucks;
25
26     sub catch_zap {
27         my $signame = shift;
28         $shucks++;
29         die "Somebody sent me a SIG$signame";
30     }
31     $SIG{INT} = __PACKAGE__ . "::catch_zap";  
32     $SIG{INT} = \&catch_zap;  # best strategy
33
34 Prior to Perl 5.7.3 it was necessary to do as little as you possibly
35 could in your handler; notice how all we do is set a global variable
36 and then raise an exception.  That's because on most systems,
37 libraries are not re-entrant; particularly, memory allocation and I/O
38 routines are not.  That meant that doing nearly I<anything> in your
39 handler could in theory trigger a memory fault and subsequent core
40 dump - see L</Deferred Signals (Safe Signals)> below.
41
42 The names of the signals are the ones listed out by C<kill -l> on your
43 system, or you can retrieve them from the Config module.  Set up an
44 @signame list indexed by number to get the name and a %signo hash table
45 indexed by name to get the number:
46
47     use Config;
48     defined($Config{sig_name})  || die "No sigs?";
49     foreach $name (split(" ", $Config{sig_name})) {
50         $signo{$name} = $i;
51         $signame[$i]  = $name;
52         $i++;
53     }
54
55 So to check whether signal 17 and SIGALRM were the same, do just this:
56
57     print "signal #17 = $signame[17]\n";
58     if ($signo{ALRM}) {
59         print "SIGALRM is $signo{ALRM}\n";
60     }
61
62 You may also choose to assign the strings C<"IGNORE"> or C<"DEFAULT"> as
63 the handler, in which case Perl will try to discard the signal or do the
64 default thing.
65
66 On most Unix platforms, the C<CHLD> (sometimes also known as C<CLD>) signal
67 has special behavior with respect to a value of C<"IGNORE">.
68 Setting C<$SIG{CHLD}> to C<"IGNORE"> on such a platform has the effect of
69 not creating zombie processes when the parent process fails to C<wait()>
70 on its child processes (i.e., child processes are automatically reaped).
71 Calling C<wait()> with C<$SIG{CHLD}> set to C<"IGNORE"> usually returns
72 C<-1> on such platforms.
73
74 Some signals can be neither trapped nor ignored, such as the KILL and STOP
75 (but not the TSTP) signals.  One strategy for temporarily ignoring signals
76 is to use a local() on that hash element, automatically restoring a
77 previous value once your block is exited.  Remember that values created by
78 the dynamically-scoped local() are "inherited" by functions called from
79 within their caller's scope.
80
81     sub precious {
82         local $SIG{INT} = "IGNORE";
83         more_functions();
84     }
85     sub more_functions {
86         # interrupts still ignored, for now...
87     }
88
89 Sending a signal to a negative process ID means that you send the signal
90 to the entire Unix process group.  This code sends a hang-up signal to all
91 processes in the current process group, and also sets $SIG{HUP} to C<"IGNORE"> 
92 so it doesn't kill itself:
93
94     # block scope for local
95     {
96         local $SIG{HUP} = "IGNORE";
97         kill HUP => -$$;
98         # snazzy writing of: kill("HUP", -$$)
99     }
100
101 Another interesting signal to send is signal number zero.  This doesn't
102 actually affect a child process, but instead checks whether it's alive
103 or has changed its UID.
104
105     unless (kill 0 => $kid_pid) {
106         warn "something wicked happened to $kid_pid";
107     }
108
109 When directed at a process whose UID is not identical to that
110 of the sending process, signal number zero may fail because
111 you lack permission to send the signal, even though the process is alive.
112 You may be able to determine the cause of failure using C<%!>.
113
114     unless (kill(0 => $pid) || $!{EPERM}) {
115         warn "$pid looks dead";
116     }
117
118 You might also want to employ anonymous functions for simple signal
119 handlers:
120
121     $SIG{INT} = sub { die "\nOutta here!\n" };
122
123 But that will be problematic for the more complicated handlers that need
124 to reinstall themselves.  Because Perl's signal mechanism is currently
125 based on the signal(3) function from the C library, you may sometimes be so
126 unfortunate as to run on systems where that function is "broken"; that
127 is, it behaves in the old unreliable SysV way rather than the newer, more
128 reasonable BSD and POSIX fashion.  So you'll see defensive people writing
129 signal handlers like this:
130
131     sub REAPER {
132         $waitedpid = wait;
133         # loathe SysV: it makes us not only reinstate
134         # the handler, but place it after the wait
135         $SIG{CHLD} = \&REAPER;
136     }
137     $SIG{CHLD} = \&REAPER;
138     # now do something that forks...
139
140 or better still:
141
142     use POSIX ":sys_wait_h";
143     sub REAPER {
144         my $child;
145         # If a second child dies while in the signal handler caused by the
146         # first death, we won't get another signal. So must loop here else
147         # we will leave the unreaped child as a zombie. And the next time
148         # two children die we get another zombie. And so on.
149         while (($child = waitpid(-1, WNOHANG)) > 0) {
150             $Kid_Status{$child} = $?;
151         }
152         $SIG{CHLD} = \&REAPER;  # still loathe SysV
153     }
154     $SIG{CHLD} = \&REAPER;
155     # do something that forks...
156
157 Be careful: qx(), system(), and some modules for calling external commands
158 do a fork(), then wait() for the result. Thus, your signal handler
159 (C<&REAPER> in the example) will be called. Because wait() was already
160 called by system() or qx(), the wait() in the signal handler will see no
161 more zombies and will therefore block.
162
163 The best way to prevent this issue is to use waitpid(), as in the following
164 example:
165
166     use POSIX ":sys_wait_h"; # for nonblocking read
167
168     my %children;
169
170     $SIG{CHLD} = sub {
171         # don't change $! and $? outside handler
172         local ($!, $?);
173         my $pid = waitpid(-1, WNOHANG);
174         return if $pid == -1;
175         return unless defined $children{$pid};
176         delete $children{$pid};
177         cleanup_child($pid, $?);
178     };
179
180     while (1) {
181         my $pid = fork();
182         die "cannot fork" unless defined $pid;
183         if ($pid == 0) {
184             # ...
185             exit 0;
186         } else {
187             $children{$pid}=1;
188             # ...
189             system($command);
190             # ...
191        }
192     }
193
194 Signal handling is also used for timeouts in Unix.  While safely
195 protected within an C<eval{}> block, you set a signal handler to trap
196 alarm signals and then schedule to have one delivered to you in some
197 number of seconds.  Then try your blocking operation, clearing the alarm
198 when it's done but not before you've exited your C<eval{}> block.  If it
199 goes off, you'll use die() to jump out of the block, much as you might
200 using longjmp() or throw() in other languages.
201
202 Here's an example:
203
204     my $ALARM_EXCEPTION = "alarm clock restart";
205     eval {
206         local $SIG{ALRM} = sub { die $ALARM_EXCEPTION };
207         alarm 10;
208         flock(FH, 2)    # blocking write lock
209                         || die "cannot flock: $!";
210         alarm 0;
211     };
212     if ($@ && $@ !~ quotemeta($ALARM_EXCEPTION)) { die }
213
214 If the operation being timed out is system() or qx(), this technique
215 is liable to generate zombies.    If this matters to you, you'll
216 need to do your own fork() and exec(), and kill the errant child process.
217
218 For more complex signal handling, you might see the standard POSIX
219 module.  Lamentably, this is almost entirely undocumented, but
220 the F<t/lib/posix.t> file from the Perl source distribution has some
221 examples in it.
222
223 =head2 Handling the SIGHUP Signal in Daemons
224
225 A process that usually starts when the system boots and shuts down
226 when the system is shut down is called a daemon (Disk And Execution
227 MONitor). If a daemon process has a configuration file which is
228 modified after the process has been started, there should be a way to
229 tell that process to reread its configuration file without stopping
230 the process. Many daemons provide this mechanism using a C<SIGHUP>
231 signal handler. When you want to tell the daemon to reread the file,
232 simply send it the C<SIGHUP> signal.
233
234 Not all platforms automatically reinstall their (native) signal
235 handlers after a signal delivery.  This means that the handler works
236 the first time the signal is sent, only. The solution to this problem
237 is to use C<POSIX> signal handlers if available; their behavior
238 is well-defined.
239
240 The following example implements a simple daemon, which restarts
241 itself every time the C<SIGHUP> signal is received. The actual code is
242 located in the subroutine C<code()>, which just prints some debugging
243 info to show that it works; it should be replaced with the real code.
244
245   #!/usr/bin/perl -w
246
247   use POSIX ();
248   use FindBin ();
249   use File::Basename ();
250   use File::Spec::Functions;
251
252   $| = 1;
253
254   # make the daemon cross-platform, so exec always calls the script
255   # itself with the right path, no matter how the script was invoked.
256   my $script = File::Basename::basename($0);
257   my $SELF  = catfile($FindBin::Bin, $script);
258
259   # POSIX unmasks the sigprocmask properly
260   my $sigset = POSIX::SigSet->new();
261   my $action = POSIX::SigAction->new("sigHUP_handler",
262                                      $sigset,
263                                      &POSIX::SA_NODEFER);
264   POSIX::sigaction(&POSIX::SIGHUP, $action);
265
266   sub sigHUP_handler {
267       print "got SIGHUP\n";
268       exec($SELF, @ARGV)        || die "$0: couldn't restart: $!";
269   }
270
271   code();
272
273   sub code {
274       print "PID: $$\n";
275       print "ARGV: @ARGV\n";
276       my $count = 0;
277       while (++$count) {
278           sleep 2;
279           print "$count\n";
280       }
281   }
282
283
284 =head1 Named Pipes
285
286 A named pipe (often referred to as a FIFO) is an old Unix IPC
287 mechanism for processes communicating on the same machine.  It works
288 just like regular anonymous pipes, except that the
289 processes rendezvous using a filename and need not be related.
290
291 To create a named pipe, use the C<POSIX::mkfifo()> function.
292
293     use POSIX qw(mkfifo);
294     mkfifo($path, 0700)     ||  die "mkfifo $path failed: $!";
295
296 You can also use the Unix command mknod(1), or on some
297 systems, mkfifo(1).  These may not be in your normal path, though.
298
299     # system return val is backwards, so && not ||
300     #
301     $ENV{PATH} .= ":/etc:/usr/etc";
302     if  (      system("mknod",  $path, "p")
303             && system("mkfifo", $path) )
304     {
305         die "mk{nod,fifo} $path failed";
306     }
307
308
309 A fifo is convenient when you want to connect a process to an unrelated
310 one.  When you open a fifo, the program will block until there's something
311 on the other end.
312
313 For example, let's say you'd like to have your F<.signature> file be a
314 named pipe that has a Perl program on the other end.  Now every time any
315 program (like a mailer, news reader, finger program, etc.) tries to read
316 from that file, the reading program will read the new signature from your
317 program.  We'll use the pipe-checking file-test operator, B<-p>, to find
318 out whether anyone (or anything) has accidentally removed our fifo.
319
320     chdir();    # go home
321     my $FIFO = ".signature";
322
323     while (1) {
324         unless (-p $FIFO) {
325             unlink $FIFO;   # discard any failure, will catch later
326             require POSIX;  # delayed loading of heavy module
327             POSIX::mkfifo($FIFO, 0700)
328                                 || die "can't mkfifo $FIFO: $!";
329         }
330
331         # next line blocks till there's a reader
332         open (FIFO, "> $FIFO")  || die "can't open $FIFO: $!";
333         print FIFO "John Smith (smith\@host.org)\n", `fortune -s`;
334         close(FIFO)             || die "can't close $FIFO: $!";
335         sleep 2;                # to avoid dup signals
336     }
337
338 =head2 Deferred Signals (Safe Signals)
339
340 Before Perl 5.7.3, installing Perl code to deal with signals exposed you to
341 danger from two things.  First, few system library functions are
342 re-entrant.  If the signal interrupts while Perl is executing one function
343 (like malloc(3) or printf(3)), and your signal handler then calls the same
344 function again, you could get unpredictable behavior--often, a core dump.
345 Second, Perl isn't itself re-entrant at the lowest levels.  If the signal
346 interrupts Perl while Perl is changing its own internal data structures,
347 similarly unpredictable behavior may result.
348
349 There were two things you could do, knowing this: be paranoid or be
350 pragmatic.  The paranoid approach was to do as little as possible in your
351 signal handler.  Set an existing integer variable that already has a
352 value, and return.  This doesn't help you if you're in a slow system call,
353 which will just restart.  That means you have to C<die> to longjmp(3) out
354 of the handler.  Even this is a little cavalier for the true paranoiac,
355 who avoids C<die> in a handler because the system I<is> out to get you.
356 The pragmatic approach was to say "I know the risks, but prefer the
357 convenience", and to do anything you wanted in your signal handler,
358 and be prepared to clean up core dumps now and again.
359
360 Perl 5.7.3 and later avoid these problems by "deferring" signals.  That is,
361 when the signal is delivered to the process by the system (to the C code
362 that implements Perl) a flag is set, and the handler returns immediately.
363 Then at strategic "safe" points in the Perl interpreter (e.g. when it is
364 about to execute a new opcode) the flags are checked and the Perl level
365 handler from %SIG is executed. The "deferred" scheme allows much more
366 flexibility in the coding of signal handlers as we know the Perl
367 interpreter is in a safe state, and that we are not in a system library function when the handler is called.  However the implementation does
368 differ from previous Perls in the following ways:
369
370 =over 4
371
372 =item Long-running opcodes
373
374 As the Perl interpreter looks at signal flags only when it is about
375 to execute a new opcode, a signal that arrives during a long-running
376 opcode (e.g. a regular expression operation on a very large string) will
377 not be seen until the current opcode completes.
378
379 If a signal of any given type fires multiple times during an opcode 
380 (such as from a fine-grained timer), the handler for that signal will
381 be called only once, after the opcode completes; all other
382 instances will be discarded.  Furthermore, if your system's signal queue
383 gets flooded to the point that there are signals that have been raised
384 but not yet caught (and thus not deferred) at the time an opcode
385 completes, those signals may well be caught and deferred during
386 subsequent opcodes, with sometimes surprising results.  For example, you
387 may see alarms delivered even after calling C<alarm(0)> as the latter
388 stops the raising of alarms but does not cancel the delivery of alarms
389 raised but not yet caught.  Do not depend on the behaviors described in
390 this paragraph as they are side effects of the current implementation and
391 may change in future versions of Perl.
392
393 =item Interrupting IO
394
395 When a signal is delivered (e.g., SIGINT from a control-C) the operating
396 system breaks into IO operations like I<read>(2), which is used to
397 implement Perl's readline() function, the C<< <> >> operator. On older
398 Perls the handler was called immediately (and as C<read> is not "unsafe",
399 this worked well). With the "deferred" scheme the handler is I<not> called
400 immediately, and if Perl is using the system's C<stdio> library that
401 library may restart the C<read> without returning to Perl to give it a
402 chance to call the %SIG handler. If this happens on your system the
403 solution is to use the C<:perlio> layer to do IO--at least on those handles
404 that you want to be able to break into with signals. (The C<:perlio> layer
405 checks the signal flags and calls %SIG handlers before resuming IO
406 operation.)
407
408 The default in Perl 5.7.3 and later is to automatically use
409 the C<:perlio> layer.
410
411 Some networking library functions like gethostbyname() are known to have
412 their own implementations of timeouts which may conflict with your
413 timeouts.  If you have problems with such functions, try using the POSIX
414 sigaction() function, which bypasses Perl safe signals.  Be warned that
415 this does subject you to possible memory corruption, as described above.
416
417 Instead of setting C<$SIG{ALRM}>:
418
419    local $SIG{ALRM} = sub { die "alarm" };
420
421 try something like the following:
422
423     use POSIX qw(SIGALRM);
424     POSIX::sigaction(SIGALRM,
425                      POSIX::SigAction->new(sub { die "alarm" }))
426             || die "Error setting SIGALRM handler: $!\n";
427
428 Another way to disable the safe signal behavior locally is to use
429 the C<Perl::Unsafe::Signals> module from CPAN, which affects
430 all signals.
431
432 =item Restartable system calls
433
434 On systems that supported it, older versions of Perl used the
435 SA_RESTART flag when installing %SIG handlers.  This meant that
436 restartable system calls would continue rather than returning when
437 a signal arrived.  In order to deliver deferred signals promptly,
438 Perl 5.7.3 and later do I<not> use SA_RESTART.  Consequently, 
439 restartable system calls can fail (with $! set to C<EINTR>) in places
440 where they previously would have succeeded.
441
442 The default C<:perlio> layer retries C<read>, C<write>
443 and C<close> as described above; interrupted C<wait> and 
444 C<waitpid> calls will always be retried.
445
446 =item Signals as "faults"
447
448 Certain signals like SEGV, ILL, and BUS are generated by virtual memory
449 addressing errors and similiar "faults". These are normally fatal: there is
450 little a Perl-level handler can do with them.  So Perl now delivers them
451 immediately rather than attempting to defer them.
452
453 =item Signals triggered by operating system state
454
455 On some operating systems certain signal handlers are supposed to "do
456 something" before returning. One example can be CHLD or CLD, which
457 indicates a child process has completed. On some operating systems the
458 signal handler is expected to C<wait> for the completed child
459 process. On such systems the deferred signal scheme will not work for
460 those signals: it does not do the C<wait>. Again the failure will
461 look like a loop as the operating system will reissue the signal because
462 there are completed child processes that have not yet been C<wait>ed for.
463
464 =back
465
466 If you want the old signal behavior back despite possible
467 memory corruption, set the environment variable C<PERL_SIGNALS> to
468 C<"unsafe">.  This feature first appeared in Perl 5.8.1.
469
470 =head1 Using open() for IPC
471
472 Perl's basic open() statement can also be used for unidirectional
473 interprocess communication by either appending or prepending a pipe
474 symbol to the second argument to open().  Here's how to start
475 something up in a child process you intend to write to:
476
477     open(SPOOLER, "| cat -v | lpr -h 2>/dev/null")
478                         || die "can't fork: $!";
479     local $SIG{PIPE} = sub { die "spooler pipe broke" };
480     print SPOOLER "stuff\n";
481     close SPOOLER       || die "bad spool: $! $?";
482
483 And here's how to start up a child process you intend to read from:
484
485     open(STATUS, "netstat -an 2>&1 |")
486                         || die "can't fork: $!";
487     while (<STATUS>) {
488         next if /^(tcp|udp)/;
489         print;
490     }
491     close STATUS        || die "bad netstat: $! $?";
492
493 If one can be sure that a particular program is a Perl script expecting
494 filenames in @ARGV, the clever programmer can write something like this:
495
496     % program f1 "cmd1|" - f2 "cmd2|" f3 < tmpfile
497
498 and no matter which sort of shell it's called from, the Perl program will
499 read from the file F<f1>, the process F<cmd1>, standard input (F<tmpfile>
500 in this case), the F<f2> file, the F<cmd2> command, and finally the F<f3>
501 file.  Pretty nifty, eh?
502
503 You might notice that you could use backticks for much the
504 same effect as opening a pipe for reading:
505
506     print grep { !/^(tcp|udp)/ } `netstat -an 2>&1`;
507     die "bad netstatus ($?)" if $?;
508
509 While this is true on the surface, it's much more efficient to process the
510 file one line or record at a time because then you don't have to read the
511 whole thing into memory at once.  It also gives you finer control of the
512 whole process, letting you kill off the child process early if you'd like.
513
514 Be careful to check the return values from both open() and close().  If
515 you're I<writing> to a pipe, you should also trap SIGPIPE.  Otherwise,
516 think of what happens when you start up a pipe to a command that doesn't
517 exist: the open() will in all likelihood succeed (it only reflects the
518 fork()'s success), but then your output will fail--spectacularly.  Perl
519 can't know whether the command worked, because your command is actually
520 running in a separate process whose exec() might have failed.  Therefore,
521 while readers of bogus commands return just a quick EOF, writers
522 to bogus commands will get hit with a signal, which they'd best be prepared
523 to handle.  Consider:
524
525     open(FH, "|bogus")      || die "can't fork: $!";
526     print FH "bang\n";      #  neither necessary nor sufficient 
527                             #  to check print retval!
528     close(FH)               || die "can't close: $!";
529
530 The reason for not checking the return value from print() is because of
531 pipe buffering; physical writes are delayed.  That won't blow up until the
532 close, and it will blow up with a SIGPIPE.  To catch it, you could use
533 this:
534
535     $SIG{PIPE} = "IGNORE";
536     open(FH, "|bogus")  || die "can't fork: $!";
537     print FH "bang\n";
538     close(FH)           || die "can't close: status=$?";
539
540 =head2 Filehandles
541
542 Both the main process and any child processes it forks share the same
543 STDIN, STDOUT, and STDERR filehandles.  If both processes try to access
544 them at once, strange things can happen.  You may also want to close
545 or reopen the filehandles for the child.  You can get around this by
546 opening your pipe with open(), but on some systems this means that the
547 child process cannot outlive the parent.
548
549 =head2 Background Processes
550
551 You can run a command in the background with:
552
553     system("cmd &");
554
555 The command's STDOUT and STDERR (and possibly STDIN, depending on your
556 shell) will be the same as the parent's.  You won't need to catch
557 SIGCHLD because of the double-fork taking place; see below for details.
558
559 =head2 Complete Dissociation of Child from Parent
560
561 In some cases (starting server processes, for instance) you'll want to
562 completely dissociate the child process from the parent.  This is
563 often called daemonization.  A well-behaved daemon will also chdir()
564 to the root directory so it doesn't prevent unmounting the filesystem
565 containing the directory from which it was launched, and redirect its
566 standard file descriptors from and to F</dev/null> so that random
567 output doesn't wind up on the user's terminal.
568
569     use POSIX "setsid";
570
571     sub daemonize {
572         chdir("/")                      || die "can't chdir to /: $!";
573         open(STDIN,  "< /dev/null")     || die "can't read /dev/null: $!";
574         open(STDOUT, "> /dev/null")     || die "can't write to /dev/null: $!";
575         defined(my $pid = fork())       || die "can't fork: $!";
576         exit if $pid;                   # non-zero now means I am the parent
577         (setsid() != -1)                || die "Can't start a new session: $!" 
578         open(STDERR, ">&STDOUT")        || die "can't dup stdout: $!";
579     }
580
581 The fork() has to come before the setsid() to ensure you aren't a
582 process group leader; the setsid() will fail if you are.  If your
583 system doesn't have the setsid() function, open F</dev/tty> and use the
584 C<TIOCNOTTY> ioctl() on it instead.  See tty(4) for details.
585
586 Non-Unix users should check their C<< I<Your_OS>::Process >> module for 
587 other possible solutions.
588
589 =head2 Safe Pipe Opens
590
591 Another interesting approach to IPC is making your single program go
592 multiprocess and communicate between--or even amongst--yourselves.  The
593 open() function will accept a file argument of either C<"-|"> or C<"|-">
594 to do a very interesting thing: it forks a child connected to the
595 filehandle you've opened.  The child is running the same program as the
596 parent.  This is useful for safely opening a file when running under an
597 assumed UID or GID, for example.  If you open a pipe I<to> minus, you can
598 write to the filehandle you opened and your kid will find it in I<his>
599 STDIN.  If you open a pipe I<from> minus, you can read from the filehandle
600 you opened whatever your kid writes to I<his> STDOUT.
601
602     use English qw[ -no_match_vars ];
603     my $PRECIOUS = "/path/to/some/safe/file";
604     my $sleep_count;
605     my $pid;
606
607     do {
608         $pid = open(KID_TO_WRITE, "|-");
609         unless (defined $pid) {
610             warn "cannot fork: $!";
611             die "bailing out" if $sleep_count++ > 6;
612             sleep 10;
613         }
614     } until defined $pid;
615
616     if ($pid) {                 # I am the parent 
617         print KID_TO_WRITE @some_data;
618         close(KID_TO_WRITE)     || warn "kid exited $?";
619     } else {                    # I am the child
620         # drop permissions in setuid and/or setgid programs:
621         ($EUID, $EGID) = ($UID, $GID);  
622         open (OUTFILE, "> $PRECIOUS") 
623                                 || die "can't open $PRECIOUS: $!";
624         while (<STDIN>) {
625             print OUTFILE;      # child's STDIN is parent's KID_TO_WRITE
626         }
627         close(OUTFILE)          || die "can't close $PRECIOUS: $!";
628         exit(0);                # don't forget this!!
629     }
630
631 Another common use for this construct is when you need to execute
632 something without the shell's interference.  With system(), it's
633 straightforward, but you can't use a pipe open or backticks safely.
634 That's because there's no way to stop the shell from getting its hands on
635 your arguments.   Instead, use lower-level control to call exec() directly.
636
637 Here's a safe backtick or pipe open for read:
638
639     my $pid = open(KID_TO_READ, "-|");
640     defined($pid)           || die "can't fork: $!";
641
642     if ($pid) {             # parent
643         while (<KID_TO_READ>) {
644                             # do something interesting
645         }
646         close(KID_TO_READ)  || warn "kid exited $?";
647
648     } else {                # child
649         ($EUID, $EGID) = ($UID, $GID); # suid only
650         exec($program, @options, @args)
651                             || die "can't exec program: $!";
652         # NOTREACHED
653     }
654
655 And here's a safe pipe open for writing:
656
657     my $pid = open(KID_TO_WRITE, "|-");
658     defined($pid)           || die "can't fork: $!";
659
660     $SIG{PIPE} = sub { die "whoops, $program pipe broke" };
661
662     if ($pid) {             # parent
663         print KID_TO_WRITE @data;
664         close(KID_TO_WRITE) || warn "kid exited $?";
665
666     } else {                # child
667         ($EUID, $EGID) = ($UID, $GID);
668         exec($program, @options, @args)
669                             || die "can't exec program: $!";
670         # NOTREACHED
671     }
672
673 It is very easy to dead-lock a process using this form of open(), or
674 indeed with any use of pipe() with multiple subprocesses.  The 
675 example above is "safe" because it is simple and calls exec().  See
676 L</"Avoiding Pipe Deadlocks"> for general safety principles, but there
677 are extra gotchas with Safe Pipe Opens.
678
679 In particular, if you opened the pipe using C<open FH, "|-">, then you
680 cannot simply use close() in the parent process to close an unwanted
681 writer.  Consider this code:
682
683     my $pid = open(WRITER, "|-");        # fork open a kid
684     defined($pid)               || die "first fork failed: $!";
685     if ($pid) {
686         if (my $sub_pid = fork()) {
687             defined($sub_pid)   || die "second fork failed: $!";
688             close(WRITER)       || die "couldn't close WRITER: $!";
689             # now do something else...
690         }
691         else {
692             # first write to WRITER
693             # ...
694             # then when finished
695             close(WRITER)       || die "couldn't close WRITER: $!";
696             exit(0);
697         }
698     }
699     else {
700         # first do something with STDIN, then
701         exit(0);
702     }
703
704 In the example above, the true parent does not want to write to the WRITER
705 filehandle, so it closes it.  However, because WRITER was opened using
706 C<open FH, "|-">, it has a special behavior: closing it calls
707 waitpid() (see L<perlfunc/waitpid>), which waits for the subprocess
708 to exit.  If the child process ends up waiting for something happening
709 in the section marked "do something else", you have deadlock.
710
711 This can also be a problem with intermediate subprocesses in more
712 complicated code, which will call waitpid() on all open filehandles
713 during global destruction--in no predictable order.
714
715 To solve this, you must manually use pipe(), fork(), and the form of
716 open() which sets one file descriptor to another, as shown below:
717
718     pipe(READER, WRITER)        || die "pipe failed: $!";
719     $pid = fork();
720     defined($pid)               || die "first fork failed: $!";
721     if ($pid) {
722         close READER;
723         if (my $sub_pid = fork()) {
724             defined($sub_pid)   || die "first fork failed: $!";
725             close(WRITER)       || die "can't close WRITER: $!";
726         }
727         else {
728             # write to WRITER...
729             # ...
730             # then  when finished
731             close(WRITER)       || die "can't close WRITER: $!";
732             exit(0);
733         }
734         # write to WRITER...
735     }
736     else {
737         open(STDIN, "<&READER") || die "can't reopen STDIN: $!";
738         close(WRITER)           || die "can't close WRITER: $!";
739         # do something...
740         exit(0);
741     }
742
743 Since Perl 5.8.0, you can also use the list form of C<open> for pipes.
744 This is preferred when you wish to avoid having the shell interpret
745 metacharacters that may be in your command string.
746
747 So for example, instead of using:
748
749     open(PS_PIPE, "ps aux|")    || die "can't open ps pipe: $!";
750
751 One would use either of these:
752
753     open(PS_PIPE, "-|", "ps", "aux") 
754                                 || die "can't open ps pipe: $!";
755
756     @ps_args = qw[ ps aux ];
757     open(PS_PIPE, "-|", @ps_args)
758                                 || die "can't open @ps_args|: $!";
759
760 Because there are more than three arguments to open(), forks the ps(1)
761 command I<without> spawning a shell, and reads its standard output via the
762 C<PS_PIPE> filehandle.  The corresponding syntax to I<write> to command
763 pipes is to use C<"|-"> in place of C<"-|">.  
764
765 This was admittedly a rather silly example, because you're using string
766 literals whose content is perfectly safe.  There is therefore no cause to
767 resort to the harder-to-read, multi-argument form of pipe open().  However,
768 whenever you cannot be assured that the program arguments are free of shell
769 metacharacters, the fancier form of open() should be used.  For example:
770
771     @grep_args = ("egrep", "-i", $some_pattern, @many_files);
772     open(GREP_PIPE, "-|", @grep_args)
773                         || die "can't open @grep_args|: $!";
774
775 Here the multi-argument form of pipe open() is preferred because the
776 pattern and indeed even the filenames themselves might hold metacharacters.
777
778 Be aware that these operations are full Unix forks, which means they may
779 not be correctly implemented on all alien systems.  Additionally, these are
780 not true multithreading.  To learn more about threading, see the F<modules>
781 file mentioned below in the SEE ALSO section.
782
783 =head2 Avoiding Pipe Deadlocks
784
785 Whenever you have more than one subprocess, you must be careful that each
786 closes whichever half of any pipes created for interprocess communication
787 it is not using.  This is because any child process reading from the pipe
788 and expecting an EOF will never receive it, and therefore never exit. A
789 single process closing a pipe is not enough to close it; the last process
790 with the pipe open must close it for it to read EOF.
791
792 Certain built-in Unix features help prevent this most of the time.  For
793 instance, filehandles have a "close on exec" flag, which is set I<en masse>
794 under control of the C<$^F> variable.  This is so any filehandles you
795 didn't explicitly route to the STDIN, STDOUT or STDERR of a child
796 I<program> will be automatically closed.
797
798 Always explicitly and immediately call close() on the writable end of any
799 pipe, unless that process is actually writing to it.  Even if you don't
800 explicitly call close(), Perl will still close() all filehandles during
801 global destruction.  As previously discussed, if those filehandles have
802 been opened with Safe Pipe Open, this will result in calling waitpid(),
803 which may again deadlock.
804
805 =head2 Bidirectional Communication with Another Process
806
807 While this works reasonably well for unidirectional communication, what
808 about bidirectional communication?  The most obvious approach doesn't work:
809
810     # THIS DOES NOT WORK!!
811     open(PROG_FOR_READING_AND_WRITING, "| some program |")
812
813 If you forget to C<use warnings>, you'll miss out entirely on the
814 helpful diagnostic message:
815
816     Can't do bidirectional pipe at -e line 1.
817
818 If you really want to, you can use the standard open2() from the
819 C<IPC::Open2> module to catch both ends.  There's also an open3() in
820 C<IPC::Open3> for tridirectional I/O so you can also catch your child's
821 STDERR, but doing so would then require an awkward select() loop and
822 wouldn't allow you to use normal Perl input operations.
823
824 If you look at its source, you'll see that open2() uses low-level
825 primitives like the pipe() and exec() syscalls to create all the
826 connections.  Although it might have been more efficient by using
827 socketpair(), this would have been even less portable than it already
828 is. The open2() and open3() functions are unlikely to work anywhere
829 except on a Unix system, or at least one purporting POSIX compliance.
830
831 =for TODO
832 Hold on, is this even true?  First it says that socketpair() is avoided
833 for portability, but then it says it probably won't work except on 
834 Unixy systems anyway.  Which one of those is true?
835
836 Here's an example of using open2():
837
838     use FileHandle;
839     use IPC::Open2;
840     $pid = open2(*Reader, *Writer, "cat -un");
841     print Writer "stuff\n";
842     $got = <Reader>;
843
844 The problem with this is that buffering is really going to ruin your
845 day.  Even though your C<Writer> filehandle is auto-flushed so the process
846 on the other end gets your data in a timely manner, you can't usually do
847 anything to force that process to give its data to you in a similarly quick
848 fashion.  In this special case, we could actually so, because we gave
849 I<cat> a B<-u> flag to make it unbuffered.  But very few commands are
850 designed to operate over pipes, so this seldom works unless you yourself
851 wrote the program on the other end of the double-ended pipe.
852
853 A solution to this is to use a library which uses pseudottys to make your
854 program behave more reasonably.  This way you don't have to have control
855 over the source code of the program you're using.  The C<Expect> module
856 from CPAN also addresses this kind of thing.  This module requires two
857 other modules from CPAN, C<IO::Pty> and C<IO::Stty>.  It sets up a pseudo
858 terminal to interact with programs that insist on talking to the terminal
859 device driver.  If your system is supported, this may be your best bet.
860
861 =head2 Bidirectional Communication with Yourself
862
863 If you want, you may make low-level pipe() and fork() syscalls to stitch
864 this together by hand.  This example only talks to itself, but you could
865 reopen the appropriate handles to STDIN and STDOUT and call other processes.
866 (The following example lacks proper error checking.)
867
868     #!/usr/bin/perl -w
869     # pipe1 - bidirectional communication using two pipe pairs
870     #         designed for the socketpair-challenged
871     use IO::Handle;               # thousands of lines just for autoflush :-(
872     pipe(PARENT_RDR, CHILD_WTR);  # XXX: check failure?
873     pipe(CHILD_RDR,  PARENT_WTR); # XXX: check failure?
874     CHILD_WTR->autoflush(1);
875     PARENT_WTR->autoflush(1);
876
877     if ($pid = fork()) {
878         close PARENT_RDR; 
879         close PARENT_WTR;
880         print CHILD_WTR "Parent Pid $$ is sending this\n";
881         chomp($line = <CHILD_RDR>);
882         print "Parent Pid $$ just read this: `$line'\n";
883         close CHILD_RDR; close CHILD_WTR;
884         waitpid($pid, 0);
885     } else {
886         die "cannot fork: $!" unless defined $pid;
887         close CHILD_RDR; 
888         close CHILD_WTR;
889         chomp($line = <PARENT_RDR>);
890         print "Child Pid $$ just read this: `$line'\n";
891         print PARENT_WTR "Child Pid $$ is sending this\n";
892         close PARENT_RDR; 
893         close PARENT_WTR;
894         exit(0);
895     }
896
897 But you don't actually have to make two pipe calls.  If you
898 have the socketpair() system call, it will do this all for you.
899
900     #!/usr/bin/perl -w
901     # pipe2 - bidirectional communication using socketpair
902     #   "the best ones always go both ways"
903
904     use Socket;
905     use IO::Handle;  # thousands of lines just for autoflush :-(
906
907     # We say AF_UNIX because although *_LOCAL is the
908     # POSIX 1003.1g form of the constant, many machines
909     # still don't have it.
910     socketpair(CHILD, PARENT, AF_UNIX, SOCK_STREAM, PF_UNSPEC)
911                                 ||  die "socketpair: $!";
912
913     CHILD->autoflush(1);
914     PARENT->autoflush(1);
915
916     if ($pid = fork()) {
917         close PARENT;
918         print CHILD "Parent Pid $$ is sending this\n";
919         chomp($line = <CHILD>);
920         print "Parent Pid $$ just read this: `$line'\n";
921         close CHILD;
922         waitpid($pid, 0);
923     } else {
924         die "cannot fork: $!" unless defined $pid;
925         close CHILD;
926         chomp($line = <PARENT>);
927         print "Child Pid $$ just read this: '$line'\n";
928         print PARENT "Child Pid $$ is sending this\n";
929         close PARENT;
930         exit(0);
931     }
932
933 =head1 Sockets: Client/Server Communication
934
935 While not entirely limited to Unix-derived operating systems (e.g., WinSock
936 on PCs provides socket support, as do some VMS libraries), you might not have
937 sockets on your system, in which case this section probably isn't going to
938 do you much good.  With sockets, you can do both virtual circuits like TCP
939 streams and datagrams like UDP packets.  You may be able to do even more
940 depending on your system.
941
942 The Perl functions for dealing with sockets have the same names as
943 the corresponding system calls in C, but their arguments tend to differ
944 for two reasons.  First, Perl filehandles work differently than C file
945 descriptors.  Second, Perl already knows the length of its strings, so you
946 don't need to pass that information.
947
948 One of the major problems with ancient, antemillennial socket code in Perl
949 was that it used hard-coded values for some of the constants, which
950 severely hurt portability.  If you ever see code that does anything like
951 explicitly setting C<$AF_INET = 2>, you know you're in for big trouble.  
952 An immeasurably superior approach is to use the C<Socket> module, which more
953 reliably grants access to the various constants and functions you'll need.
954
955 If you're not writing a server/client for an existing protocol like
956 NNTP or SMTP, you should give some thought to how your server will
957 know when the client has finished talking, and vice-versa.  Most
958 protocols are based on one-line messages and responses (so one party
959 knows the other has finished when a "\n" is received) or multi-line
960 messages and responses that end with a period on an empty line
961 ("\n.\n" terminates a message/response).
962
963 =head2 Internet Line Terminators
964
965 The Internet line terminator is "\015\012".  Under ASCII variants of
966 Unix, that could usually be written as "\r\n", but under other systems,
967 "\r\n" might at times be "\015\015\012", "\012\012\015", or something
968 completely different.  The standards specify writing "\015\012" to be
969 conformant (be strict in what you provide), but they also recommend
970 accepting a lone "\012" on input (be lenient in what you require).
971 We haven't always been very good about that in the code in this manpage,
972 but unless you're on a Mac from way back in its pre-Unix dark ages, you'll 
973 probably be ok.
974
975 =head2 Internet TCP Clients and Servers
976
977 Use Internet-domain sockets when you want to do client-server
978 communication that might extend to machines outside of your own system.
979
980 Here's a sample TCP client using Internet-domain sockets:
981
982     #!/usr/bin/perl -w
983     use strict;
984     use Socket;
985     my ($remote, $port, $iaddr, $paddr, $proto, $line);
986
987     $remote  = shift || "localhost";
988     $port    = shift || 2345;  # random port
989     if ($port =~ /\D/) { $port = getservbyname($port, "tcp") }
990     die "No port" unless $port;
991     $iaddr   = inet_aton($remote)       || die "no host: $remote";
992     $paddr   = sockaddr_in($port, $iaddr);
993
994     $proto   = getprotobyname("tcp");
995     socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";
996     connect(SOCK, $paddr)               || die "connect: $!";
997     while ($line = <SOCK>) {
998         print $line;
999     }
1000
1001     close (SOCK)                        || die "close: $!";
1002     exit(0);
1003
1004 And here's a corresponding server to go along with it.  We'll
1005 leave the address as C<INADDR_ANY> so that the kernel can choose
1006 the appropriate interface on multihomed hosts.  If you want sit
1007 on a particular interface (like the external side of a gateway
1008 or firewall machine), fill this in with your real address instead.
1009
1010     #!/usr/bin/perl -Tw
1011     use strict;
1012     BEGIN { $ENV{PATH} = "/usr/bin:/bin" }
1013     use Socket;
1014     use Carp;
1015     my $EOL = "\015\012";
1016
1017     sub logmsg { print "$0 $$: @_ at ", scalar localtime(), "\n" }
1018
1019     my $port  = shift || 2345;
1020     die "invalid port" unless if $port =~ /^ \d+ $/x;
1021
1022     my $proto = getprotobyname("tcp");
1023
1024     socket(Server, PF_INET, SOCK_STREAM, $proto)    || die "socket: $!";
1025     setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))    
1026                                                     || die "setsockopt: $!";
1027     bind(Server, sockaddr_in($port, INADDR_ANY))    || die "bind: $!";
1028     listen(Server, SOMAXCONN)                       || die "listen: $!";
1029
1030     logmsg "server started on port $port";
1031
1032     my $paddr;
1033
1034     $SIG{CHLD} = \&REAPER;
1035
1036     for ( ; $paddr = accept(Client, Server); close Client) {
1037         my($port, $iaddr) = sockaddr_in($paddr);
1038         my $name = gethostbyaddr($iaddr, AF_INET);
1039
1040         logmsg "connection from $name [",
1041                 inet_ntoa($iaddr), "]
1042                 at port $port";
1043
1044         print Client "Hello there, $name, it's now ",
1045                         scalar localtime(), $EOL;
1046     }
1047
1048 And here's a multithreaded version.  It's multithreaded in that
1049 like most typical servers, it spawns (fork()s) a slave server to
1050 handle the client request so that the master server can quickly
1051 go back to service a new client.
1052
1053     #!/usr/bin/perl -Tw
1054     use strict;
1055     BEGIN { $ENV{PATH} = "/usr/bin:/bin" }
1056     use Socket;
1057     use Carp;
1058     my $EOL = "\015\012";
1059
1060     sub spawn;  # forward declaration
1061     sub logmsg { print "$0 $$: @_ at ", scalar localtime(), "\n" }
1062
1063     my $port  = shift || 2345;
1064     die "invalid port" unless if $port =~ /^ \d+ $/x;
1065
1066     my $proto = getprotobyname("tcp");
1067
1068     socket(Server, PF_INET, SOCK_STREAM, $proto)    || die "socket: $!";
1069     setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))         
1070                                                     || die "setsockopt: $!";
1071     bind(Server, sockaddr_in($port, INADDR_ANY))    || die "bind: $!";
1072     listen(Server, SOMAXCONN)                       || die "listen: $!";
1073
1074     logmsg "server started on port $port";
1075
1076     my $waitedpid = 0;
1077     my $paddr;
1078
1079     use POSIX ":sys_wait_h";
1080     use Errno;
1081
1082     sub REAPER {
1083         local $!;   # don't let waitpid() overwrite current error
1084         while ((my $pid = waitpid(-1, WNOHANG)) > 0 && WIFEXITED($?)) {
1085             logmsg "reaped $waitedpid" . ($? ? " with exit $?" : "");
1086         }
1087         $SIG{CHLD} = \&REAPER;  # loathe SysV
1088     }
1089
1090     $SIG{CHLD} = \&REAPER;
1091
1092     while (1) {
1093         $paddr = accept(Client, Server) || do {
1094             # try again if accept() returned because got a signal
1095             next if $!{EINTR};
1096             die "accept: $!";
1097         };
1098         my ($port, $iaddr) = sockaddr_in($paddr);
1099         my $name = gethostbyaddr($iaddr, AF_INET);
1100
1101         logmsg "connection from $name [",
1102                inet_ntoa($iaddr),
1103                "] at port $port";
1104
1105         spawn sub {
1106             $| = 1;
1107             print "Hello there, $name, it's now ", scalar localtime(), $EOL;
1108             exec "/usr/games/fortune"       # XXX: "wrong" line terminators
1109                 or confess "can't exec fortune: $!";
1110         };
1111         close Client;
1112     }
1113
1114     sub spawn {
1115         my $coderef = shift;
1116
1117         unless (@_ == 0 && $coderef && ref($coderef) eq "CODE") {
1118             confess "usage: spawn CODEREF";
1119         }
1120
1121         my $pid;
1122         unless (defined($pid = fork())) {
1123             logmsg "cannot fork: $!";
1124             return;
1125         } 
1126         elsif ($pid) {
1127             logmsg "begat $pid";
1128             return; # I'm the parent
1129         }
1130         # else I'm the child -- go spawn
1131
1132         open(STDIN,  "<&Client")    || die "can't dup client to stdin";
1133         open(STDOUT, ">&Client")    || die "can't dup client to stdout";
1134         ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
1135         exit($coderef->());
1136     }
1137
1138 This server takes the trouble to clone off a child version via fork()
1139 for each incoming request.  That way it can handle many requests at
1140 once, which you might not always want.  Even if you don't fork(), the
1141 listen() will allow that many pending connections.  Forking servers
1142 have to be particularly careful about cleaning up their dead children
1143 (called "zombies" in Unix parlance), because otherwise you'll quickly
1144 fill up your process table.  The REAPER subroutine is used here to
1145 call waitpid() for any child processes that have finished, thereby
1146 ensuring that they terminate cleanly and don't join the ranks of the
1147 living dead.
1148
1149 Within the while loop we call accept() and check to see if it returns
1150 a false value.  This would normally indicate a system error needs
1151 to be reported.  However, the introduction of safe signals (see
1152 L</Deferred Signals (Safe Signals)> above) in Perl 5.7.3 means that
1153 accept() might also be interrupted when the process receives a signal.
1154 This typically happens when one of the forked subprocesses exits and
1155 notifies the parent process with a CHLD signal.  
1156
1157 If accept() is interrupted by a signal, $! will be set to EINTR.
1158 If this happens, we can safely continue to the next iteration of
1159 the loop and another call to accept().  It is important that your
1160 signal handling code not modify the value of $!, or else this test 
1161 will likely fail.  In the REAPER subroutine we create a local version
1162 of $! before calling waitpid().  When waitpid() sets $! to ECHILD as
1163 it inevitably does when it has no more children waiting, it 
1164 updates the local copy and leaves the original unchanged.
1165
1166 You should use the B<-T> flag to enable taint checking (see L<perlsec>)
1167 even if we aren't running setuid or setgid.  This is always a good idea
1168 for servers or any program run on behalf of someone else (like CGI
1169 scripts), because it lessens the chances that people from the outside will
1170 be able to compromise your system.
1171
1172 Let's look at another TCP client.  This one connects to the TCP "time"
1173 service on a number of different machines and shows how far their clocks
1174 differ from the system on which it's being run:
1175
1176     #!/usr/bin/perl  -w
1177     use strict;
1178     use Socket;
1179
1180     my $SECS_OF_70_YEARS = 2208988800;
1181     sub ctime { scalar localtime(shift() || time()) }
1182
1183     my $iaddr = gethostbyname("localhost");
1184     my $proto = getprotobyname("tcp");
1185     my $port = getservbyname("time", "tcp");
1186     my $paddr = sockaddr_in(0, $iaddr);
1187     my($host);
1188
1189     $| = 1;
1190     printf "%-24s %8s %s\n", "localhost", 0, ctime();
1191
1192     foreach $host (@ARGV) {
1193         printf "%-24s ", $host;
1194         my $hisiaddr = inet_aton($host)     || die "unknown host";
1195         my $hispaddr = sockaddr_in($port, $hisiaddr);
1196         socket(SOCKET, PF_INET, SOCK_STREAM, $proto)   
1197                                             || die "socket: $!";
1198         connect(SOCKET, $hispaddr)          || die "connect: $!";
1199         my $rtime = pack("C4", ());
1200         read(SOCKET, $rtime, 4);
1201         close(SOCKET);
1202         my $histime = unpack("N", $rtime) - $SECS_OF_70_YEARS;
1203         printf "%8d %s\n", $histime - time(), ctime($histime);
1204     }
1205
1206 =head2 Unix-Domain TCP Clients and Servers
1207
1208 That's fine for Internet-domain clients and servers, but what about local
1209 communications?  While you can use the same setup, sometimes you don't
1210 want to.  Unix-domain sockets are local to the current host, and are often
1211 used internally to implement pipes.  Unlike Internet domain sockets, Unix
1212 domain sockets can show up in the file system with an ls(1) listing.
1213
1214     % ls -l /dev/log
1215     srw-rw-rw-  1 root            0 Oct 31 07:23 /dev/log
1216
1217 You can test for these with Perl's B<-S> file test:
1218
1219     unless (-S "/dev/log") {
1220         die "something's wicked with the log system";
1221     }
1222
1223 Here's a sample Unix-domain client:
1224
1225     #!/usr/bin/perl -w
1226     use Socket;
1227     use strict;
1228     my ($rendezvous, $line);
1229
1230     $rendezvous = shift || "catsock";
1231     socket(SOCK, PF_UNIX, SOCK_STREAM, 0)     || die "socket: $!";
1232     connect(SOCK, sockaddr_un($rendezvous))   || die "connect: $!";
1233     while (defined($line = <SOCK>)) {
1234         print $line;
1235     }
1236     exit(0);
1237
1238 And here's a corresponding server.  You don't have to worry about silly
1239 network terminators here because Unix domain sockets are guaranteed
1240 to be on the localhost, and thus everything works right.
1241
1242     #!/usr/bin/perl -Tw
1243     use strict;
1244     use Socket;
1245     use Carp;
1246
1247     BEGIN { $ENV{PATH} = "/usr/bin:/bin" }
1248     sub spawn;  # forward declaration
1249     sub logmsg { print "$0 $$: @_ at ", scalar localtime(), "\n" }
1250
1251     my $NAME = "catsock";
1252     my $uaddr = sockaddr_un($NAME);
1253     my $proto = getprotobyname("tcp");
1254
1255     socket(Server, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!";
1256     unlink($NAME);
1257     bind  (Server, $uaddr)                  || die "bind: $!";
1258     listen(Server, SOMAXCONN)               || die "listen: $!";
1259
1260     logmsg "server started on $NAME";
1261
1262     my $waitedpid;
1263
1264     use POSIX ":sys_wait_h";
1265     sub REAPER {
1266         my $child;
1267         while (($waitedpid = waitpid(-1, WNOHANG)) > 0) {
1268             logmsg "reaped $waitedpid" . ($? ? " with exit $?" : "");
1269         }
1270         $SIG{CHLD} = \&REAPER;  # loathe SysV
1271     }
1272
1273     $SIG{CHLD} = \&REAPER;
1274
1275
1276     for ( $waitedpid = 0;
1277           accept(Client, Server) || $waitedpid;
1278           $waitedpid = 0, close Client)
1279     {
1280         next if $waitedpid;
1281         logmsg "connection on $NAME";
1282         spawn sub {
1283             print "Hello there, it's now ", scalar localtime(), "\n";
1284             exec("/usr/games/fortune")  || die "can't exec fortune: $!";
1285         };
1286     }
1287
1288     sub spawn {
1289         my $coderef = shift();
1290
1291         unless (@_ == 0 && $coderef && ref($coderef) eq "CODE") {
1292             confess "usage: spawn CODEREF";
1293         }
1294
1295         my $pid;
1296         unless (defined($pid = fork())) {
1297             logmsg "cannot fork: $!";
1298             return;
1299         } 
1300         elsif ($pid) {
1301             logmsg "begat $pid";
1302             return; # I'm the parent
1303         } 
1304         else {
1305             # I'm the child -- go spawn
1306         }
1307
1308         open(STDIN,  "<&Client")    || die "can't dup client to stdin";
1309         open(STDOUT, ">&Client")    || die "can't dup client to stdout";
1310         ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
1311         exit($coderef->());
1312     }
1313
1314 As you see, it's remarkably similar to the Internet domain TCP server, so
1315 much so, in fact, that we've omitted several duplicate functions--spawn(),
1316 logmsg(), ctime(), and REAPER()--which are the same as in the other server.
1317
1318 So why would you ever want to use a Unix domain socket instead of a
1319 simpler named pipe?  Because a named pipe doesn't give you sessions.  You
1320 can't tell one process's data from another's.  With socket programming,
1321 you get a separate session for each client; that's why accept() takes two
1322 arguments.
1323
1324 For example, let's say that you have a long-running database server daemon
1325 that you want folks to be able to access from the Web, but only
1326 if they go through a CGI interface.  You'd have a small, simple CGI
1327 program that does whatever checks and logging you feel like, and then acts
1328 as a Unix-domain client and connects to your private server.
1329
1330 =head1 TCP Clients with IO::Socket
1331
1332 For those preferring a higher-level interface to socket programming, the
1333 IO::Socket module provides an object-oriented approach.  IO::Socket has
1334 been included in the standard Perl distribution ever since Perl 5.004.  If
1335 you're running an earlier version of Perl (in which case, how are you
1336 reading this manpage?), just fetch IO::Socket from CPAN, where you'll also
1337 find modules providing easy interfaces to the following systems: DNS, FTP,
1338 Ident (RFC 931), NIS and NISPlus, NNTP, Ping, POP3, SMTP, SNMP, SSLeay,
1339 Telnet, and Time--to name just a few.
1340
1341 =head2 A Simple Client
1342
1343 Here's a client that creates a TCP connection to the "daytime"
1344 service at port 13 of the host name "localhost" and prints out everything
1345 that the server there cares to provide.
1346
1347     #!/usr/bin/perl -w
1348     use IO::Socket;
1349     $remote = IO::Socket::INET->new(
1350                         Proto    => "tcp",
1351                         PeerAddr => "localhost",
1352                         PeerPort => "daytime(13)",
1353                     )
1354                   || die "can't connect to daytime service on localhost";
1355     while (<$remote>) { print }
1356
1357 When you run this program, you should get something back that
1358 looks like this:
1359
1360     Wed May 14 08:40:46 MDT 1997
1361
1362 Here are what those parameters to the new() constructor mean:
1363
1364 =over 4
1365
1366 =item C<Proto>
1367
1368 This is which protocol to use.  In this case, the socket handle returned
1369 will be connected to a TCP socket, because we want a stream-oriented
1370 connection, that is, one that acts pretty much like a plain old file.
1371 Not all sockets are this of this type.  For example, the UDP protocol
1372 can be used to make a datagram socket, used for message-passing.
1373
1374 =item C<PeerAddr>
1375
1376 This is the name or Internet address of the remote host the server is
1377 running on.  We could have specified a longer name like C<"www.perl.com">,
1378 or an address like C<"207.171.7.72">.  For demonstration purposes, we've
1379 used the special hostname C<"localhost">, which should always mean the
1380 current machine you're running on.  The corresponding Internet address
1381 for localhost is C<"127.0.0.1">, if you'd rather use that.
1382
1383 =item C<PeerPort>
1384
1385 This is the service name or port number we'd like to connect to.
1386 We could have gotten away with using just C<"daytime"> on systems with a
1387 well-configured system services file,[FOOTNOTE: The system services file
1388 is found in I</etc/services> under Unixy systems.] but here we've specified the
1389 port number (13) in parentheses.  Using just the number would have also
1390 worked, but numeric literals make careful programmers nervous.
1391
1392 =back
1393
1394 Notice how the return value from the C<new> constructor is used as
1395 a filehandle in the C<while> loop?  That's what's called an I<indirect
1396 filehandle>, a scalar variable containing a filehandle.  You can use
1397 it the same way you would a normal filehandle.  For example, you
1398 can read one line from it this way:
1399
1400     $line = <$handle>;
1401
1402 all remaining lines from is this way:
1403
1404     @lines = <$handle>;
1405
1406 and send a line of data to it this way:
1407
1408     print $handle "some data\n";
1409
1410 =head2 A Webget Client
1411
1412 Here's a simple client that takes a remote host to fetch a document
1413 from, and then a list of files to get from that host.  This is a
1414 more interesting client than the previous one because it first sends
1415 something to the server before fetching the server's response.
1416
1417     #!/usr/bin/perl -w
1418     use IO::Socket;
1419     unless (@ARGV > 1) { die "usage: $0 host url ..." }
1420     $host = shift(@ARGV);
1421     $EOL = "\015\012";
1422     $BLANK = $EOL x 2;
1423     for my $document (@ARGV) {
1424         $remote = IO::Socket::INET->new( Proto     => "tcp",
1425                                          PeerAddr  => $host,
1426                                          PeerPort  => "http(80)",
1427                   )     || die "cannot connect to httpd on $host";
1428         $remote->autoflush(1);
1429         print $remote "GET $document HTTP/1.0" . $BLANK;
1430         while ( <$remote> ) { print }
1431         close $remote;
1432     }
1433
1434 The web server handling the HTTP service is assumed to be at
1435 its standard port, number 80.  If the server you're trying to
1436 connect to is at a different port, like 1080 or 8080, you should specify it
1437 as the named-parameter pair, C<< PeerPort => 8080 >>.  The C<autoflush>
1438 method is used on the socket because otherwise the system would buffer
1439 up the output we sent it.  (If you're on a prehistoric Mac, you'll also
1440 need to change every C<"\n"> in your code that sends data over the network
1441 to be a C<"\015\012"> instead.)
1442
1443 Connecting to the server is only the first part of the process: once you
1444 have the connection, you have to use the server's language.  Each server
1445 on the network has its own little command language that it expects as
1446 input.  The string that we send to the server starting with "GET" is in
1447 HTTP syntax.  In this case, we simply request each specified document.
1448 Yes, we really are making a new connection for each document, even though
1449 it's the same host.  That's the way you always used to have to speak HTTP.
1450 Recent versions of web browsers may request that the remote server leave
1451 the connection open a little while, but the server doesn't have to honor
1452 such a request.
1453
1454 Here's an example of running that program, which we'll call I<webget>:
1455
1456     % webget www.perl.com /guanaco.html
1457     HTTP/1.1 404 File Not Found
1458     Date: Thu, 08 May 1997 18:02:32 GMT
1459     Server: Apache/1.2b6
1460     Connection: close
1461     Content-type: text/html
1462
1463     <HEAD><TITLE>404 File Not Found</TITLE></HEAD>
1464     <BODY><H1>File Not Found</H1>
1465     The requested URL /guanaco.html was not found on this server.<P>
1466     </BODY>
1467
1468 Ok, so that's not very interesting, because it didn't find that
1469 particular document.  But a long response wouldn't have fit on this page.
1470
1471 For a more featureful version of this program, you should look to
1472 the I<lwp-request> program included with the LWP modules from CPAN.
1473
1474 =head2 Interactive Client with IO::Socket
1475
1476 Well, that's all fine if you want to send one command and get one answer,
1477 but what about setting up something fully interactive, somewhat like
1478 the way I<telnet> works?  That way you can type a line, get the answer,
1479 type a line, get the answer, etc.
1480
1481 This client is more complicated than the two we've done so far, but if
1482 you're on a system that supports the powerful C<fork> call, the solution
1483 isn't that rough.  Once you've made the connection to whatever service
1484 you'd like to chat with, call C<fork> to clone your process.  Each of
1485 these two identical process has a very simple job to do: the parent
1486 copies everything from the socket to standard output, while the child
1487 simultaneously copies everything from standard input to the socket.
1488 To accomplish the same thing using just one process would be I<much>
1489 harder, because it's easier to code two processes to do one thing than it
1490 is to code one process to do two things.  (This keep-it-simple principle
1491 a cornerstones of the Unix philosophy, and good software engineering as
1492 well, which is probably why it's spread to other systems.)
1493
1494 Here's the code:
1495
1496     #!/usr/bin/perl -w
1497     use strict;
1498     use IO::Socket;
1499     my ($host, $port, $kidpid, $handle, $line);
1500
1501     unless (@ARGV == 2) { die "usage: $0 host port" }
1502     ($host, $port) = @ARGV;
1503
1504     # create a tcp connection to the specified host and port
1505     $handle = IO::Socket::INET->new(Proto     => "tcp",
1506                                     PeerAddr  => $host,
1507                                     PeerPort  => $port)
1508                || die "can't connect to port $port on $host: $!";
1509
1510     $handle->autoflush(1);       # so output gets there right away
1511     print STDERR "[Connected to $host:$port]\n";
1512
1513     # split the program into two processes, identical twins
1514     die "can't fork: $!" unless defined($kidpid = fork());
1515
1516     # the if{} block runs only in the parent process
1517     if ($kidpid) {
1518         # copy the socket to standard output
1519         while (defined ($line = <$handle>)) {
1520             print STDOUT $line;
1521         }
1522         kill("TERM", $kidpid);   # send SIGTERM to child
1523     }
1524     # the else{} block runs only in the child process
1525     else {
1526         # copy standard input to the socket
1527         while (defined ($line = <STDIN>)) {
1528             print $handle $line;
1529         }
1530         exit(0);                # just in case
1531     }
1532
1533 The C<kill> function in the parent's C<if> block is there to send a
1534 signal to our child process, currently running in the C<else> block,
1535 as soon as the remote server has closed its end of the connection.
1536
1537 If the remote server sends data a byte at time, and you need that
1538 data immediately without waiting for a newline (which might not happen),
1539 you may wish to replace the C<while> loop in the parent with the
1540 following:
1541
1542     my $byte;
1543     while (sysread($handle, $byte, 1) == 1) {
1544         print STDOUT $byte;
1545     }
1546
1547 Making a system call for each byte you want to read is not very efficient
1548 (to put it mildly) but is the simplest to explain and works reasonably
1549 well.
1550
1551 =head1 TCP Servers with IO::Socket
1552
1553 As always, setting up a server is little bit more involved than running a client.
1554 The model is that the server creates a special kind of socket that
1555 does nothing but listen on a particular port for incoming connections.
1556 It does this by calling the C<< IO::Socket::INET->new() >> method with
1557 slightly different arguments than the client did.
1558
1559 =over 4
1560
1561 =item Proto
1562
1563 This is which protocol to use.  Like our clients, we'll
1564 still specify C<"tcp"> here.
1565
1566 =item LocalPort
1567
1568 We specify a local
1569 port in the C<LocalPort> argument, which we didn't do for the client.
1570 This is service name or port number for which you want to be the
1571 server. (Under Unix, ports under 1024 are restricted to the
1572 superuser.)  In our sample, we'll use port 9000, but you can use
1573 any port that's not currently in use on your system.  If you try
1574 to use one already in used, you'll get an "Address already in use"
1575 message.  Under Unix, the C<netstat -a> command will show
1576 which services current have servers.
1577
1578 =item Listen
1579
1580 The C<Listen> parameter is set to the maximum number of
1581 pending connections we can accept until we turn away incoming clients.
1582 Think of it as a call-waiting queue for your telephone.
1583 The low-level Socket module has a special symbol for the system maximum, which
1584 is SOMAXCONN.
1585
1586 =item Reuse
1587
1588 The C<Reuse> parameter is needed so that we restart our server
1589 manually without waiting a few minutes to allow system buffers to
1590 clear out.
1591
1592 =back
1593
1594 Once the generic server socket has been created using the parameters
1595 listed above, the server then waits for a new client to connect
1596 to it.  The server blocks in the C<accept> method, which eventually accepts a
1597 bidirectional connection from the remote client.  (Make sure to autoflush
1598 this handle to circumvent buffering.)
1599
1600 To add to user-friendliness, our server prompts the user for commands.
1601 Most servers don't do this.  Because of the prompt without a newline,
1602 you'll have to use the C<sysread> variant of the interactive client above.
1603
1604 This server accepts one of five different commands, sending output back to
1605 the client.  Unlike most network servers, this one handles only one
1606 incoming client at a time.  Multithreaded servers are covered in 
1607 Chapter 16 of the Camel.
1608
1609 Here's the code.  We'll
1610
1611  #!/usr/bin/perl -w
1612  use IO::Socket;
1613  use Net::hostent;      # for OOish version of gethostbyaddr
1614
1615  $PORT = 9000;          # pick something not in use
1616
1617  $server = IO::Socket::INET->new( Proto     => "tcp",
1618                                   LocalPort => $PORT,
1619                                   Listen    => SOMAXCONN,
1620                                   Reuse     => 1);
1621
1622  die "can't setup server" unless $server;
1623  print "[Server $0 accepting clients]\n";
1624
1625  while ($client = $server->accept()) {
1626    $client->autoflush(1);
1627    print $client "Welcome to $0; type help for command list.\n";
1628    $hostinfo = gethostbyaddr($client->peeraddr);
1629    printf "[Connect from %s]\n", $hostinfo ? $hostinfo->name : $client->peerhost;
1630    print $client "Command? ";
1631    while ( <$client>) {
1632      next unless /\S/;       # blank line
1633      if    (/quit|exit/i)    { last                                      }
1634      elsif (/date|time/i)    { printf $client "%s\n", scalar localtime() }
1635      elsif (/who/i )         { print  $client `who 2>&1`                 }
1636      elsif (/cookie/i )      { print  $client `/usr/games/fortune 2>&1`  }
1637      elsif (/motd/i )        { print  $client `cat /etc/motd 2>&1`       }
1638      else {
1639        print $client "Commands: quit date who cookie motd\n";
1640      }
1641    } continue {
1642       print $client "Command? ";
1643    }
1644    close $client;
1645  }
1646
1647 =head1 UDP: Message Passing
1648
1649 Another kind of client-server setup is one that uses not connections, but
1650 messages.  UDP communications involve much lower overhead but also provide
1651 less reliability, as there are no promises that messages will arrive at
1652 all, let alone in order and unmangled.  Still, UDP offers some advantages
1653 over TCP, including being able to "broadcast" or "multicast" to a whole
1654 bunch of destination hosts at once (usually on your local subnet).  If you
1655 find yourself overly concerned about reliability and start building checks
1656 into your message system, then you probably should use just TCP to start
1657 with.
1658
1659 UDP datagrams are I<not> a bytestream and should not be treated as such.
1660 This makes using I/O mechanisms with internal buffering like stdio (i.e.
1661 print() and friends) especially cumbersome. Use syswrite(), or better
1662 send(), like in the example below.
1663
1664 Here's a UDP program similar to the sample Internet TCP client given
1665 earlier.  However, instead of checking one host at a time, the UDP version
1666 will check many of them asynchronously by simulating a multicast and then
1667 using select() to do a timed-out wait for I/O.  To do something similar
1668 with TCP, you'd have to use a different socket handle for each host.
1669
1670     #!/usr/bin/perl -w
1671     use strict;
1672     use Socket;
1673     use Sys::Hostname;
1674
1675     my ( $count, $hisiaddr, $hispaddr, $histime,
1676          $host, $iaddr, $paddr, $port, $proto,
1677          $rin, $rout, $rtime, $SECS_OF_70_YEARS);
1678
1679     $SECS_OF_70_YEARS = 2_208_988_800;
1680
1681     $iaddr = gethostbyname(hostname());
1682     $proto = getprotobyname("udp");
1683     $port = getservbyname("time", "udp");
1684     $paddr = sockaddr_in(0, $iaddr); # 0 means let kernel pick
1685
1686     socket(SOCKET, PF_INET, SOCK_DGRAM, $proto)   || die "socket: $!";
1687     bind(SOCKET, $paddr)                          || die "bind: $!";
1688
1689     $| = 1;
1690     printf "%-12s %8s %s\n",  "localhost", 0, scalar localtime();
1691     $count = 0;
1692     for $host (@ARGV) {
1693         $count++;
1694         $hisiaddr = inet_aton($host)              || die "unknown host";
1695         $hispaddr = sockaddr_in($port, $hisiaddr);
1696         defined(send(SOCKET, 0, 0, $hispaddr))    || die "send $host: $!";
1697     }
1698
1699     $rin = "";
1700     vec($rin, fileno(SOCKET), 1) = 1;
1701
1702     # timeout after 10.0 seconds
1703     while ($count && select($rout = $rin, undef, undef, 10.0)) {
1704         $rtime = "";
1705         $hispaddr = recv(SOCKET, $rtime, 4, 0)    || die "recv: $!";
1706         ($port, $hisiaddr) = sockaddr_in($hispaddr);
1707         $host = gethostbyaddr($hisiaddr, AF_INET);
1708         $histime = unpack("N", $rtime) - $SECS_OF_70_YEARS;
1709         printf "%-12s ", $host;
1710         printf "%8d %s\n", $histime - time(), scalar localtime($histime);
1711         $count--;
1712     }
1713
1714 This example does not include any retries and may consequently fail to
1715 contact a reachable host. The most prominent reason for this is congestion
1716 of the queues on the sending host if the number of hosts to contact is
1717 sufficiently large.
1718
1719 =head1 SysV IPC
1720
1721 While System V IPC isn't so widely used as sockets, it still has some
1722 interesting uses.  However, you cannot use SysV IPC or Berkeley mmap() to
1723 have a variable shared amongst several processes.  That's because Perl
1724 would reallocate your string when you weren't wanting it to.  You might
1725 look into the C<IPC::Shareable> or C<threads::shared> modules for that.
1726
1727 Here's a small example showing shared memory usage.
1728
1729     use IPC::SysV qw(IPC_PRIVATE IPC_RMID S_IRUSR S_IWUSR);
1730
1731     $size = 2000;
1732     $id = shmget(IPC_PRIVATE, $size, S_IRUSR | S_IWUSR);
1733     defined($id)                    || die "shmget: $!";
1734     print "shm key $id\n";
1735
1736     $message = "Message #1";
1737     shmwrite($id, $message, 0, 60)  || die "shmwrite: $!";
1738     print "wrote: '$message'\n";
1739     shmread($id, $buff, 0, 60)      || die "shmread: $!";
1740     print "read : '$buff'\n";
1741
1742     # the buffer of shmread is zero-character end-padded.
1743     substr($buff, index($buff, "\0")) = "":
1744     print "un" unless $buff eq $message;
1745     print "swell\n";
1746
1747     print "deleting shm $id\n";
1748     shmctl($id, IPC_RMID, 0)        || die "shmctl: $!";
1749
1750 Here's an example of a semaphore:
1751
1752     use IPC::SysV qw(IPC_CREAT);
1753
1754     $IPC_KEY = 1234;
1755     $id = semget($IPC_KEY, 10, 0666 | IPC_CREAT);
1756     defined($id)                    || die "shmget: $!";
1757     print "shm key $id\n";
1758
1759 Put this code in a separate file to be run in more than one process.
1760 Call the file F<take>:
1761
1762     # create a semaphore
1763
1764     $IPC_KEY = 1234;
1765     $id = semget($IPC_KEY, 0, 0);
1766     defined($id)                    || die "shmget: $!";
1767
1768     $semnum  = 0;
1769     $semflag = 0;
1770
1771     # "take" semaphore
1772     # wait for semaphore to be zero
1773     $semop = 0;
1774     $opstring1 = pack("s!s!s!", $semnum, $semop, $semflag);
1775
1776     # Increment the semaphore count
1777     $semop = 1;
1778     $opstring2 = pack("s!s!s!", $semnum, $semop,  $semflag);
1779     $opstring  = $opstring1 . $opstring2;
1780
1781     semop($id, $opstring)   || die "semop: $!";
1782
1783 Put this code in a separate file to be run in more than one process.
1784 Call this file F<give>:
1785
1786     # "give" the semaphore
1787     # run this in the original process and you will see
1788     # that the second process continues
1789
1790     $IPC_KEY = 1234;
1791     $id = semget($IPC_KEY, 0, 0);
1792     die unless defined($id);
1793
1794     $semnum  = 0;
1795     $semflag = 0;
1796
1797     # Decrement the semaphore count
1798     $semop = -1;
1799     $opstring = pack("s!s!s!", $semnum, $semop, $semflag);
1800
1801     semop($id, $opstring)   || die "semop: $!";
1802
1803 The SysV IPC code above was written long ago, and it's definitely
1804 clunky looking.  For a more modern look, see the IPC::SysV module
1805 which is included with Perl starting from Perl 5.005.
1806
1807 A small example demonstrating SysV message queues:
1808
1809     use IPC::SysV qw(IPC_PRIVATE IPC_RMID IPC_CREAT S_IRUSR S_IWUSR);
1810
1811     my $id = msgget(IPC_PRIVATE, IPC_CREAT | S_IRUSR | S_IWUSR);
1812     defined($id)                || die "msgget failed: $!";
1813
1814     my $sent      = "message";
1815     my $type_sent = 1234;
1816
1817     msgsnd($id, pack("l! a*", $type_sent, $sent), 0)
1818                                 || die "msgsnd failed: $!";
1819
1820     msgrcv($id, my $rcvd_buf, 60, 0, 0)
1821                                 || die "msgrcv failed: $!";
1822
1823     my($type_rcvd, $rcvd) = unpack("l! a*", $rcvd_buf);
1824
1825     if ($rcvd eq $sent) {
1826         print "okay\n";
1827     } else {
1828         print "not okay\n";
1829     }
1830
1831     msgctl($id, IPC_RMID, 0)    || die "msgctl failed: $!\n";
1832
1833 =head1 NOTES
1834
1835 Most of these routines quietly but politely return C<undef> when they
1836 fail instead of causing your program to die right then and there due to
1837 an uncaught exception.  (Actually, some of the new I<Socket> conversion
1838 functions do croak() on bad arguments.)  It is therefore essential to
1839 check return values from these functions.  Always begin your socket
1840 programs this way for optimal success, and don't forget to add the B<-T>
1841 taint-checking flag to the C<#!> line for servers:
1842
1843     #!/usr/bin/perl -Tw
1844     use strict;
1845     use sigtrap;
1846     use Socket;
1847
1848 =head1 BUGS
1849
1850 These routines all create system-specific portability problems.  As noted
1851 elsewhere, Perl is at the mercy of your C libraries for much of its system
1852 behavior.  It's probably safest to assume broken SysV semantics for
1853 signals and to stick with simple TCP and UDP socket operations; e.g., don't
1854 try to pass open file descriptors over a local UDP datagram socket if you
1855 want your code to stand a chance of being portable.
1856
1857 =head1 AUTHOR
1858
1859 Tom Christiansen, with occasional vestiges of Larry Wall's original
1860 version and suggestions from the Perl Porters.
1861
1862 =head1 SEE ALSO
1863
1864 There's a lot more to networking than this, but this should get you
1865 started.
1866
1867 For intrepid programmers, the indispensable textbook is I<Unix Network
1868 Programming, 2nd Edition, Volume 1> by W. Richard Stevens (published by
1869 Prentice-Hall).  Most books on networking address the subject from the
1870 perspective of a C programmer; translation to Perl is left as an exercise
1871 for the reader.
1872
1873 The IO::Socket(3) manpage describes the object library, and the Socket(3)
1874 manpage describes the low-level interface to sockets.  Besides the obvious
1875 functions in L<perlfunc>, you should also check out the F<modules> file at
1876 your nearest CPAN site, especially
1877 L<http://www.cpan.org/modules/00modlist.long.html#ID5_Networking_>.  
1878 See L<perlmodlib> or best yet, the F<Perl FAQ> for a description
1879 of what CPAN is and where to get it if the previous link doesn't work 
1880 for you.
1881
1882 Section 5 of CPAN's F<modules> file is devoted to "Networking, Device
1883 Control (modems), and Interprocess Communication", and contains numerous
1884 unbundled modules numerous networking modules, Chat and Expect operations,
1885 CGI programming, DCE, FTP, IPC, NNTP, Proxy, Ptty, RPC, SNMP, SMTP, Telnet,
1886 Threads, and ToolTalk--to name just a few.