* Use the non-generic TCP versions of listen and accept.
authorUrban Wallasch <urban.wallasch@freenet.de>
Mon, 8 Apr 2019 20:09:02 +0000 (22:09 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Mon, 8 Apr 2019 20:09:02 +0000 (22:09 +0200)
gogopherd.go

index ee37184d0a1cda8d33a702bef794ff5402c31157..e400a97e89ddfd26033e23d5b1401437965bf0ad 100644 (file)
@@ -175,7 +175,7 @@ func handleRequest(conn net.Conn) {
        }
        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")
@@ -247,26 +247,29 @@ func handleRequest(conn net.Conn) {
        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)