* Replaced old exit strategy by waiting for SIGINT / SIGTERM.
authorUrban Wallasch <urban.wallasch@freenet.de>
Sun, 7 Apr 2019 20:08:59 +0000 (22:08 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Sun, 7 Apr 2019 20:08:59 +0000 (22:08 +0200)
gogopherd.go

index af26bcb73199feb0d9a0c484a83103c08f756296..a89fe5a3bbf8bc54ac1be702cebb9cc33dde327c 100644 (file)
@@ -14,15 +14,18 @@ package main
 
 import (
        "bufio"
-       "fmt"
        "io"
        "io/ioutil"
        "net"
        "os"
+       "os/signal"
        "path/filepath"
        "strings"
+       "syscall"
 )
 
+var shutting_down bool = false
+
 func createIndex(dirname string, selector string) (string, error) {
        fi, err := ioutil.ReadDir(dirname)
        if check(err, "Readdir "+dirname) != nil {
@@ -236,6 +239,9 @@ func handleRequest(conn net.Conn) {
 func serveTCP(sock net.Listener) {
        for {
                conn, err := sock.Accept()
+               if shutting_down {
+                       return
+               }
                checkFatal(err, "Accept")
                logger.Print("TCP connect from ", conn.RemoteAddr())
                go handleRequest(conn)
@@ -250,11 +256,14 @@ func main() {
        defer tsock.Close()
        logger.Print("listening on TCP ", bindaddr)
        go serveTCP(tsock)
-       // send ready signal
-       fmt.Println("")
-       // exit on any input on stdin
-       reader := bufio.NewReader(os.Stdin)
-       reader.ReadRune()
+
+       // wait for signal
+       sigchan := make(chan os.Signal)
+       signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM)
+       sig := <-sigchan
+       tracer.Print("Received signal: ", sig)
+       shutting_down = true
+       tracer.Print("Bye.")
 }
 
 /* EOF */