Socket's session

Hi there,
I need a socket (server) in perl that when session created by a client request, take a string and after some proccesing on it, send a string(response) and close the session. but socket wait for future requests.
It's possible to lead me?! :(? or write a psudo code?
Thanks in advance.

This is my server code

#!/usr/bin/perl -w
use strict;
use warnings;
use threads;
use POSIX 'setsid';

use Connection; #Connection Interface plus below line
use IO::Socket qw(:DEFAULT :crlf);
use XML::DOM;

our $session;
use ObjectAddress;
use WebFilter;
#&Daemonization();
#######################################
my ($bytes_out,$bytes_in) = (0,0);
our $quit=0;
$SIG{INT} = sub { $quit++};
my $sock = Connection->new();

# Declare a few variables for XML Handling.
my ($packet, %protoCount, $nodeName, @pktInfoArray, $pktInfo);
# Instantiate a new XML::DOM parser.
my $parser = XML::DOM::Parser->new();
########################################
##### Engine's Instantiates #########
my $OBJ = ObjectAddress->new();
########################################

while (!$quit)

{
    die "Can't fork" unless defined (my $child = fork);
    exit 0 if $child;
    next unless $session = $sock->accept;

#############################Session & Requests & Responses ###########################
my $peer = gethostbyaddr($session->peeraddr,AF_INET) || $session->peerhost;
my $port = $session->peerport;
warn "Connection from [$peer,$port]\n";
my $message = <$session>;#Read Requests
############## XML DOM & Decision Maker Arena #####################

    my $doc = $parser->parsestring($message);
    my $root = $doc->getDocumentElement();

    # Retrieve an array of all nodes.
    my @packetArray = $root->getChildNodes();

    # Loop through the array.
    foreach $packet (@packetArray)
    {
        if ($packet->getNodeType() == ELEMENT_NODE)
        {
            print "Seqnum: " . $packet->getAttribute("seqnum") . "\n";
            @pktInfoArray = $packet->getChildNodes();

            foreach $pktInfo (@pktInfoArray)
            {
                if ($pktInfo->getNodeType() == ELEMENT_NODE)
                {
                    $nodeName = $pktInfo->getNodeName();
                    $nodeName =~ s/(\w+)/\u \L$1/g;
                    print "$nodeName";

                    if ($pktInfo->getNodeName() eq "protocol")
                    {
                        if ($protoCount{$pktInfo->getFirstChild()->getData})
                        {
                            $protoCount{$pktInfo->getFirstChild()->getData}++;
                        }else{
                        $protoCount{$pktInfo->getFirstChild->getData} = 1;
                        }
                    }
                    print  " : " . $pktInfo->getFirstChild()->getData . "\n";
                }
            }
            print "\n";
        }
    }
    my ($key);
    print  "\n----------------------------\n";
    print  "Protocol Summary\n";
    foreach $key (keys %protoCount) {
    print "$key\t$protoCount{$key}\n";
    }
    $doc->dispose();
############# END OF XML DOM & Decision Maker Arena ##################

syswrite ($session, "My answer string");
close $session;

    
    #warn "Connection from [$peer,$port] finished\n";
    
##################### END OF Session & Requests & Responses #####################################
    
}#For Listen mode
sub Daemonization
{
    die "Can't fork" unless defined (my $child = fork);
    exit 0 if $child;
    setsid();
    open(STDIN, "</dev/null");
    open(STDOUT, ">/dev/null");
    open(STDERR, ">&STDOUT");
    chdir '/';
    umask(0);
    $ENV{PATH} = '/bin:/sbin:/usr/bin:/usr/sbin';
    return $$;
}

And this is my client code

#!/usr/bin/perl
use strict;
use Socket qw(:DEFAULT :crlf);
use IO::Handle;
our $array="<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE sniffer_data SYSTEM \"netlog2.dtd\"> 
<sniffer_data> 
   <packet seqnum=\"tx_1\"> 
      <protocol>SMTP</protocol> 
      <timestamp>1</timestamp>
      <source>scooby</source> 
      <dest>smtp_server</dest> 
   </packet> 
   <packet seqnum=\"tx_2\"> 
      <protocol>FTP</protocol> 
      <timestamp>4</timestamp> 
      <source>shaggy</source> 
      <dest>ftp_server</dest> 
   </packet> 
   <packet seqnum=\"tx_3\"> 
      <protocol>SNMP</protocol> 
      <timestamp>7</timestamp> 
      <source>sys_admin</source> 
      <dest>gateway</dest> 
   </packet> 
   <packet seqnum=\"tx_4\"> 
      <protocol>DNS</protocol> 
      <timestamp>8</timestamp> 
      <source>casper</source> 
      <dest>dns_server</dest> 
   </packet> 
   <packet seqnum=\"tx_5\"> 
      <protocol>HTTP</protocol> 
      <timestamp>9</timestamp> 
      <source>casper</source> 
      <dest>web_server</dest> 
   </packet> 
   <packet seqnum=\"tx_6\"> 
      <protocol>SSH</protocol> 
      <timestamp>11</timestamp> 
      <source>speedracer</source> 
      <dest>accounting</dest> 
   </packet> 
   <packet seqnum=\"tx_7\"> 
      <protocol>SMTP</protocol> 
      <timestamp>13</timestamp> 
      <source>scooby</source> 
      <dest>smtp_server</dest> 
   </packet> 
   <packet seqnum=\"tx_8\"> 
      <protocol>SMTP</protocol> 
      <timestamp>13</timestamp> 
      <source>scooby</source> 
      <dest>smtp_server</dest> 
   </packet> 
</sniffer_data>
";
my ($bytes_out,$bytes_in) = (0,0);

my $host = shift || 'localhost';
my $port = shift || getservbyname('echo','tcp');

my $protocol = getprotobyname('tcp');
$host = inet_aton($host) or die "$host: unknown host";

socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "socket() failed: $!";
my $dest_addr = sockaddr_in($port,$host);
connect(SOCK,$dest_addr) or die "connect() failed: $!";

SOCK->autoflush(1);



     syswrite(SOCK, $array);
 
#     $_=<SOCK>;
#    print $_;
close SOCK;
 

I wish, server get a xml parse it and send a response. but it does not work when client or server be responsible even for receiving a str and sending a str! why?