#!/usr/bin/perl5.003
#
#  Listing 2.
#
#  Code to illustrate asynchronous communication.
#
require 5.002;
use strict;
use Socket;
use Fcntl;

my $livesocket = 0;

# IO signal handler
sub getsock {
    $livesocket = 1;
}

$SIG{IO} = \&getsock;

my( $proto, $port, $F_SETOWN, $FASYNC );

$port = 6789;
$proto = getprotobyname( 'tcp' );

# Create an Internet protocol socket.
socket( S, AF_INET, SOCK_STREAM, $proto )   or  die "socket:$!";

bind( S, sockaddr_in( $port, INADDR_ANY) );

listen( S, 5 );

#
# Use fcntl to set up the program to accept IO signal when the
# events occur on the socket.
#
$F_SETOWN = 8;
$FASYNC = 020000;
fcntl( S, $F_SETOWN, $$ );
fcntl( S, &F_SETFL, $FASYNC );

while( 1 ){

   if($livesocket) {
       print "Signal fired\n";
       accept NS, S;
       select(NS); $| = 1; select(STDOUT);
       print NS "Some message\n";
       $livesocket = 0;
       close NS;
   }

   # do some stuff ...
}

exit;