Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: gopher server in < 1024B

by dragonchild (Archbishop)
on May 20, 2004 at 03:00 UTC ( #354838=note: print w/ replies, xml ) Need Help??


in reply to gopher server in < 1024B

Does this code actually work? I've been looking at golfing it and found a few oddities. Here's the code as run through B::Deparse:

BEGIN { $^W = 1; } use IO::Socket; use strict 'refs'; local $/ = "\r\n"; my $port = '7070'; my $root = '/home/beth/gopher/gopher'; die "can't chroot: $!\n" unless chroot $root; local $SIG{'HUP'} = 'IGNORE'; exit if my $pid = fork; die "Couldn't create socket: $!\n" unless my $sock = 'IO::Socket::INET +'->new('LocalPort', $port, 'Type', SOCK_STREAM(), 'Listen', 1, 'Reuse +', 1); my $s = $sock->accept; while (defined(my $req = <$s>)) { chomp(my $req = shift @ARGV); $req = '/' . $req; &error unless -r $req; $req .= '/.cache' if -d _; printfile($req); close $sock; } sub printfile { use strict 'refs'; open FILE, shift @_; binmode FILE; print $s <FILE>; close FILE; } sub error { use strict 'refs'; my $req = shift @_; print $s "iBad Request: $! \tfake\t(NULL)\t0" . $/; }

Please note the following: (line#'s from your code)

  1. Lines 31 and 33 both assign to my $req. On 33, it's assigning to shift @ARGV.
  2. You assign $req to shift on line 51, but don't use it and don't pass anything in to error(), either.
  3. You don't use $pid from line 17. So, essentially, you're forking to create a child, then exiting the child immediately ... ?
  4. Unless I'm mistaken, you'll only ever serve one request for one client, then leave ... ?

I'm not trying to rip it apart, but I couldn't understand it to golf it. :-(

------
We are the carpenters and bricklayers of the Information Age.

Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose

I shouldn't have to say this, but any code, unless otherwise stated, is untested


Comment on Re: gopher server in < 1024B
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://354838]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (6)
As of 2015-07-07 11:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (88 votes), past polls