Skip to content

Instantly share code, notes, and snippets.

@darren
Created March 22, 2021 11:37
Show Gist options
  • Save darren/b2dd5a5d5e2a41a691384daa1f054cf4 to your computer and use it in GitHub Desktop.
Save darren/b2dd5a5d5e2a41a691384daa1f054cf4 to your computer and use it in GitHub Desktop.
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)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment