#!/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;
Copyright © 1994 - 2019 Linux Journal. All rights reserved.