$| = 1; $server = IO::Socket::INET->new( Proto => 'tcp', LocalAddr => $ADDRESS, LocalPort => $SPORT, Listen => SOMAXCONN, Reuse => 1); die "can't setup server" unless $server; while ($client = $server->accept()) { $client->autoflush(1); my $request = <$client>; if ($request =~ m|^GET /(.+) HTTP/1.[0,1]|) { $file = $1; $size = -s $file; $_ = $file; ($ext) = /.+\.(\w+)/; $type = MimeTypes::GetType($ext); # some function to get mimetype print $client "HTTP/1.0 200 OK\r\n"; print $client "Connection: Keep-Alive\r\n"; print $client "Content-Type: $type\r\n"; print $client "Content-Length: $size\r\n"; print $client "\r\n"; open(FILE, $file); while() { print $client $_ ; } close(FILE); } close $client; }