my $remote = IO::Socket::INET->new( Proto => 'tcp', PeerAddr => $ADDRESS, PeerPort => $PORT ) or die "cannot connect to server"; $remote->autoflush(1); open(OUT, ">out.txt"); print $remote "GET /theFile.txt HTTP/1.1\r\n"; print $remote "Host: $ADDRESS:$PORT\r\n"; print $remote "Connection: close\r\n"; print $remote "\r\n"; while( <$remote> ) { print OUT $_; } close $remote; #### $| = 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; }