Skip to content

Instantly share code, notes, and snippets.

@darren
Created March 22, 2021 11:37
Show Gist options
  • Select an option

  • Save darren/b2dd5a5d5e2a41a691384daa1f054cf4 to your computer and use it in GitHub Desktop.

Select an option

Save darren/b2dd5a5d5e2a41a691384daa1f054cf4 to your computer and use it in GitHub Desktop.

Revisions

  1. darren created this gist Mar 22, 2021.
    46 changes: 46 additions & 0 deletions file_server.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,46 @@
    package main

    import (
    "flag"
    "log"
    "net"
    "net/http"
    )

    var addr = flag.String("l", ":8000", "Listening address")
    var dir = flag.String("d", ".", "serving directory")
    var v4 = flag.Bool("4", false, "serving ipv4 only")
    var v6 = flag.Bool("6", false, "serving ipv6 only")

    func main() {
    flag.Parse()
    fs := http.FileServer(http.Dir(*dir))

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    log.Printf("%s %s %s %s", r.RemoteAddr, r.Method, r.URL.Path, r.UserAgent())
    fs.ServeHTTP(w, r)
    })

    var ln net.Listener
    var err error

    switch {
    case *v4 && !*v6:
    log.Printf("Listening on %v (ipv4)", *addr)
    ln, err = net.Listen("tcp4", *addr)
    case *v6 && !*v4:
    log.Printf("Listening on %v (ipv6)", *addr)
    ln, err = net.Listen("tcp6", *addr)
    default:
    log.Printf("Listening on %v", *addr)
    ln, err = net.Listen("tcp", *addr)
    }
    if err != nil {
    log.Fatal(err)
    }

    err = http.Serve(ln, nil)
    if err != nil {
    log.Fatal(err)
    }
    }