Add signal handlers (fixes #15)
This commit is contained in:
parent
9d9ad6de88
commit
37b79735bf
@ -252,6 +252,10 @@ func protocolConnectionHandler(tcpConn net.Conn, config *tls.Config) {
|
|||||||
conn.Close()
|
conn.Close()
|
||||||
|
|
||||||
case msg := <-outbox:
|
case msg := <-outbox:
|
||||||
|
if msg == nil {
|
||||||
|
conn.Close()
|
||||||
|
return
|
||||||
|
}
|
||||||
if debug {
|
if debug {
|
||||||
log.Printf("Sending message %T to %s", msg, id)
|
log.Printf("Sending message %T to %s", msg, id)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,10 +9,13 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/juju/ratelimit"
|
"github.com/juju/ratelimit"
|
||||||
@ -158,7 +161,32 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
listener(listen, tlsCfg)
|
go listener(listen, tlsCfg)
|
||||||
|
|
||||||
|
sigs := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
<-sigs
|
||||||
|
|
||||||
|
// Gracefully close all connections, hoping that clients will be faster
|
||||||
|
// to realize that the relay is now gone.
|
||||||
|
|
||||||
|
sessionMut.RLock()
|
||||||
|
for _, session := range activeSessions {
|
||||||
|
session.CloseConns()
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, session := range pendingSessions {
|
||||||
|
session.CloseConns()
|
||||||
|
}
|
||||||
|
sessionMut.RUnlock()
|
||||||
|
|
||||||
|
outboxesMut.RLock()
|
||||||
|
for _, outbox := range outboxes {
|
||||||
|
close(outbox)
|
||||||
|
}
|
||||||
|
outboxesMut.RUnlock()
|
||||||
|
|
||||||
|
time.Sleep(500 * time.Millisecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
func monitorLimits() {
|
func monitorLimits() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user