Changeset 449 in code for trunk/cmd/soju/main.go


Ignore:
Timestamp:
Feb 9, 2021, 4:34:46 PM (4 years ago)
Author:
contact
Message:

Add support for graceful shutdown

Closes: https://todo.sr.ht/~emersion/soju/45

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/cmd/soju/main.go

    r418 r449  
    88        "net/http"
    99        "net/url"
     10        "os"
     11        "os/signal"
    1012        "strings"
     13        "syscall"
    1114
    1215        "github.com/pires/go-proxyproto"
     
    9093                        ln = proxyProtoListener(ln, srv)
    9194                        go func() {
    92                                 log.Fatal(srv.Serve(ln))
     95                                if err := srv.Serve(ln); err != nil {
     96                                        log.Printf("serving %q: %v", listen, err)
     97                                }
    9398                        }()
    9499                case "irc+insecure":
     
    103108                        ln = proxyProtoListener(ln, srv)
    104109                        go func() {
    105                                 log.Fatal(srv.Serve(ln))
     110                                if err := srv.Serve(ln); err != nil {
     111                                        log.Printf("serving %q: %v", listen, err)
     112                                }
    106113                        }()
    107114                case "wss":
     
    116123                        }
    117124                        go func() {
    118                                 log.Fatal(httpSrv.ListenAndServeTLS("", ""))
     125                                if err := httpSrv.ListenAndServeTLS("", ""); err != nil {
     126                                        log.Fatalf("serving %q: %v", listen, err)
     127                                }
    119128                        }()
    120129                case "ws+insecure":
     
    128137                        }
    129138                        go func() {
    130                                 log.Fatal(httpSrv.ListenAndServe())
     139                                if err := httpSrv.ListenAndServe(); err != nil {
     140                                        log.Fatalf("serving %q: %v", listen, err)
     141                                }
    131142                        }()
    132143                case "ident":
     
    145156                        ln = proxyProtoListener(ln, srv)
    146157                        go func() {
    147                                 log.Fatal(srv.Identd.Serve(ln))
     158                                if err := srv.Identd.Serve(ln); err != nil {
     159                                        log.Printf("serving %q: %v", listen, err)
     160                                }
    148161                        }()
    149162                default:
     
    153166                log.Printf("server listening on %q", listen)
    154167        }
    155         log.Fatal(srv.Run())
     168
     169        sigCh := make(chan os.Signal, 1)
     170        signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
     171
     172        if err := srv.Start(); err != nil {
     173                log.Fatal(err)
     174        }
     175
     176        <-sigCh
     177        log.Print("shutting down server")
     178        srv.Shutdown()
    156179}
    157180
Note: See TracChangeset for help on using the changeset viewer.