Serveur TCP en Perl

Perl 2 Commentaires »

Le script suivant permet de réaliser un simple serveur TCP en Perl.
Vous pourrez accéder ensuite à ce serveur grâce à une connexion telnet.

shell>telnet 127.0.0.1 3000

Le serveur ne fait qu’afficher des informations à l’utilisateur, et retourne ce que l’utilisateur tape.
Pour terminer la connexion, l’utilisateur utilisera le mot clé : quit.

#!/usr/bin/perl -w 
 
use strict;
use IO::Socket::INET;
 
my $server = IO::Socket::INET->new ( LocalPort => 3000, Type => SOCK_STREAM, Reuse => 1, Listen => 5) or die "Probleme serveur";
my $client;
my $chaine;
my $pid;
 
$SIG{CHLD} = 'IGNORE';
 
while ( $client = $server->accept ())
{
        $pid = fork;
        unless ($pid)
        {
                while ( 1 )
                {
                        print $client "Vous voulez dire ? ";
                        $chaine = <$client>;
                        exit unless defined $chaine;
 
                        chomp ($chaine);
 
                        if ( $chaine =~ "quit" )
                        {
                                $client->shutdown ( 2 );
                                exit;
                        }
                        else
                        {
                                print $client "Vous avez dit : $chaine\n";
                        }
                }
        }
}

Explication

$SIG{CHLD} = 'IGNORE';

Le script réalise un fork pour chaque nouvel utilisateur. Lorsque l’utilisateur termine la connexion le processus fils va se terminer grâce à la commande « exit ».
Sans $SIG{CHLD} = ‘IGNORE’ le processus fils serait transformé en processus Zombie jusqu’à ce que le processus parent soit terminé. Si vous réalisez un Daemon cela risque de saturer votre table de processus.

$server->accept ()

Met en stand-by le processus jusqu’à la connexion d’un nouvel utilisateur.
Cette fonction retourne un objet de type IO::Socket.

$chaine = <$client>;

Le processus en charge du client attend que celui-ci saisisse une valeur au clavier.

$client->shutdown ( 2 );

On termine la connexion avec l’utilisateur proprement.
Le numéro 2 indique au client que l’on a fini d’utiliser le socket.
Pour plus d’information sur cette méthode, voici la Perldoc.

Mots-clefs :, , , , , ,
 
Designed by NattyWP Wordpress Themes.
Images by desEXign.