}
req = strings.TrimSpace(req)
tracer.Print("request: '", req, "'")
- // canonicalize, and validate referenced path
+ // canonicalize and validate referenced path
rpath, err := validatePath(cfg.docroot, filepath.Join(cfg.docroot, filepath.FromSlash(req)))
if check(err, "validatePath "+rpath) != nil {
sendError(conn, "404")
return
}
-func serveTCP(sock net.Listener) {
+func serveTCP(listener *net.TCPListener) {
for {
- conn, err := sock.Accept()
+ conn, err := listener.AcceptTCP()
if shutting_down {
return
}
checkFatal(err, "Accept")
- logger.Print("TCP connect from ", conn.RemoteAddr())
+ logger.Print("connect from ", conn.RemoteAddr())
go handleRequest(conn)
}
}
func main() {
initialize()
- bindaddr := cfg.iface + ":" + cfg.port
- tsock, err := net.Listen("tcp", bindaddr)
- checkFatal(err, "net.Listen tcp "+bindaddr)
- defer tsock.Close()
- logger.Print("listening on TCP ", bindaddr)
- go serveTCP(tsock)
+
+ // listen on interface:port
+ service := cfg.iface + ":" + cfg.port
+ address, err := net.ResolveTCPAddr("tcp", service)
+ checkFatal(err, "ResolveTCPAddr")
+ listener, err := net.ListenTCP("tcp", address)
+ checkFatal(err, "ListenTCP")
+ logger.Print("listening on TCP ", address)
+ go serveTCP(listener)
// wait for signal
sigchan := make(chan os.Signal)