From a674795e4d2b5ea4dd500d07333249e33d1f17a9 Mon Sep 17 00:00:00 2001 From: Chen Yahui Date: Wed, 8 Mar 2023 18:04:06 +0800 Subject: [PATCH] server: disable tcpkeepalive The default value for tcpkeepalive in the standard net package is 15 seconds, while the default value for BGP keepalive is 30 seconds. If the network is not good, the TCP connection is disconnected before BGP can send keepalive messages. Therefore, BGP keepalive is effectively invalid. The solution is that since we have BGP keepalive, we don't need to open tcp keepalive. Signed-off-by: Chen Yahui --- pkg/server/fsm.go | 1 + pkg/server/server.go | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/pkg/server/fsm.go b/pkg/server/fsm.go index 885fab5a1..450f6edb5 100644 --- a/pkg/server/fsm.go +++ b/pkg/server/fsm.go @@ -555,6 +555,7 @@ func (h *fsmHandler) connectLoop(ctx context.Context, wg *sync.WaitGroup) { d := net.Dialer{ LocalAddr: laddr, Timeout: time.Duration(tick-1) * time.Second, + Keepalive: -1, Control: func(network, address string, c syscall.RawConn) error { return dialerControl(fsm.logger, network, address, c, ttl, ttlMin, password, bindInterface) }, diff --git a/pkg/server/server.go b/pkg/server/server.go index 9d92ea05e..faccc63a9 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -120,6 +120,16 @@ func newTCPListener(logger log.Logger, address string, port uint32, bindToDev st } return err } + err = conn.SetKeepAlive(false) + if err != nil { + conn.Close() + close(closeCh) + log.WithFields(log.Fields{ + "Topic": "Peer", + "Error": err, + }).Warn("Failed to SetKeepAlive") + return err + } ch <- conn } }()