Hello,

I'm trying to write a socket server that handles tcp clients using
threads. I've discovered that for every incoming connection 100K of
memory is used up. I understand that this is because each thread has a
copy of all data from the parent, but why is the memory not being
released when the thread ends? I am using perl 5.8.4 on a SMP Debian
system with Linux kernel 2.4.31.

Here is the code, which I suspect may be deficient in several ways
since I'm new to sockets, threads and object usage with perl:

#!/usr/bin/perl
use threads; use IO::Socket;

$sock = new IO::Socket::INET (LocalAddr => '127.0.0.1', LocalPort =>
'8888', Proto => 'tcp', Listen => 5,  Reuse => 0) or die ("problem
binding to socket.");

while ($client = $sock->accept()) {
        $client->autoflush(1);
        $sockthread = threads->new(\&serviceClient,$client);
        $sockthread->detach;
}

sub serviceClient {
        my $client = $_[0];
        print $client "hello\n";
        $client->shutdown(2);
        return;
}

Reply via email to