Enable TCP keep-alive on all connections

This commit is contained in:
Simon Ser 2020-02-18 17:26:17 +01:00
parent d484e6e374
commit 1141698a92
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 19 additions and 0 deletions

View file

@ -5,10 +5,25 @@ import (
"log"
"net"
"sync"
"time"
"gopkg.in/irc.v3"
)
// TODO: make configurable
var keepAlivePeriod = time.Minute
func setKeepAlive(c net.Conn) error {
tcpConn, ok := c.(*net.TCPConn)
if !ok {
return fmt.Errorf("cannot enable keep-alive on a non-TCP connection")
}
if err := tcpConn.SetKeepAlive(true); err != nil {
return err
}
return tcpConn.SetKeepAlivePeriod(keepAlivePeriod)
}
type Logger interface {
Print(v ...interface{})
Printf(format string, v ...interface{})
@ -177,6 +192,8 @@ func (s *Server) Serve(ln net.Listener) error {
return fmt.Errorf("failed to accept connection: %v", err)
}
setKeepAlive(netConn)
dc := newDownstreamConn(s, netConn)
go func() {
s.lock.Lock()

View file

@ -56,6 +56,8 @@ func connectToUpstream(u *user, upstream *Upstream) (*upstreamConn, error) {
return nil, fmt.Errorf("failed to dial %q: %v", upstream.Addr, err)
}
setKeepAlive(netConn)
msgs := make(chan *irc.Message, 64)
uc := &upstreamConn{
upstream: upstream,