diff --git a/config.go b/config.go index 845a16b5..1895f3c3 100644 --- a/config.go +++ b/config.go @@ -118,6 +118,9 @@ type ClientConfig struct { // impact of a few bad apples. 4s loses 1% of successful handshakes that // are obtained with 60s timeout, and 5% of unsuccessful handshakes. HandshakesTimeout time.Duration + // How long between writes before sending a keep alive message on a peer connection that we want + // to maintain. + KeepAliveTimeout time.Duration // The IP addresses as our peers should see them. May differ from the // local interfaces due to NAT or other network configurations. @@ -170,6 +173,7 @@ func NewDefaultClientConfig() *ClientConfig { TorrentPeersHighWater: 500, TorrentPeersLowWater: 50, HandshakesTimeout: 4 * time.Second, + KeepAliveTimeout: time.Minute, DhtStartingNodes: func(network string) dht.StartingNodesGetter { return func() ([]dht.Addr, error) { return dht.GlobalBootstrapAddrs(network) } }, diff --git a/peer-conn-msg-writer.go b/peer-conn-msg-writer.go index 40fc27ef..293c8388 100644 --- a/peer-conn-msg-writer.go +++ b/peer-conn-msg-writer.go @@ -37,7 +37,7 @@ func (pc *PeerConn) startWriter() { defer pc.locker().Unlock() defer pc.close() defer pc.locker().Lock() - pc.messageWriter.run(time.Minute) + pc.messageWriter.run(pc.t.cl.config.KeepAliveTimeout) }() } diff --git a/testing.go b/testing.go index 01e72857..ed825145 100644 --- a/testing.go +++ b/testing.go @@ -2,6 +2,7 @@ package torrent import ( "testing" + "time" ) func TestingConfig(t testing.TB) *ClientConfig { @@ -13,6 +14,7 @@ func TestingConfig(t testing.TB) *ClientConfig { cfg.NoDefaultPortForwarding = true cfg.DisableAcceptRateLimiting = true cfg.ListenPort = 0 + cfg.KeepAliveTimeout = time.Microsecond //cfg.Debug = true //cfg.Logger = cfg.Logger.WithText(func(m log.Msg) string { // t := m.Text()