#! /usr/bin/perl -w use strict; my $port = 12345; use Getopt::Long; GetOptions( "p|port" => \$port ); use IO::Socket; my $l = IO::Socket->new( Domain => AF_INET, Type => SOCK_STREAM, Proto => "tcp", Listen => 5, LocalPort => $port ) or die "listen: $!"; while ( my $s = $l->accept() ) { $_ = $s->getline( ); /^GET\s+\/(\S+)\s+HTTP\/1\./; my $fn = $1 ? $1 : "playlist"; $fn =~ s/%(..)/chr hex $1/ge; open IN, $fn or die "open $fn: $!"; -s( IN ) < 1024*1024*64 or $s->print("HTTP/1.0 404 not found\r\n\r\n"), next; $s->printf("HTTP/1.0 200 OK\r\nContent-Length: %i\r\n\r\n", -s(IN)); undef $/; $s->print(); $/ = "\n"; close IN; $s->close(); } die "accept: $! ($@)"; $l->close();