"github.com/dustin/go-humanize"
gbtree "github.com/google/btree"
"github.com/pion/datachannel"
- "golang.org/x/time/rate"
"github.com/anacrolix/torrent/bencode"
"github.com/anacrolix/torrent/internal/check"
torrents map[InfoHash]*Torrent
pieceRequestOrder map[interface{}]*request_strategy.PieceRequestOrder
- acceptLimiter map[ipStr]int
- dialRateLimiter *rate.Limiter
- numHalfOpen int
+ acceptLimiter map[ipStr]int
+ numHalfOpen int
websocketTrackers websocketTrackers
cl.config = cfg
g.MakeMap(&cl.dopplegangerAddrs)
cl.torrents = make(map[metainfo.Hash]*Torrent)
- cl.dialRateLimiter = rate.NewLimiter(10, 10)
cl.activeAnnounceLimiter.SlotsPerKey = 2
cl.event.L = cl.locker()
cl.ipBlockList = cfg.IPBlocklist
// Returns nil connection and nil error if no connection could be established for valid reasons.
func (cl *Client) dialAndCompleteHandshake(opts outgoingConnOpts) (c *PeerConn, err error) {
+ err = cl.config.DialRateLimiter.Wait(context.Background())
+ if err != nil {
+ return
+ }
torrent.Add("establish outgoing connection", 1)
addr := opts.peerInfo.Addr
dialPool := dialPool{
opts outgoingConnOpts,
attemptKey outgoingConnAttemptKey,
) {
- cl.dialRateLimiter.Wait(context.Background())
c, err := cl.dialAndCompleteHandshake(opts)
if err == nil {
c.conn.SetWriteDeadline(time.Time{})
DisableWebseeds bool
Callbacks Callbacks
+
+ DialRateLimiter *rate.Limiter
}
func (cfg *ClientConfig) SetListenAddr(addr string) *ClientConfig {
Extensions: defaultPeerExtensionBytes(),
AcceptPeerConnections: true,
MaxUnverifiedBytes: 64 << 20,
+ DialRateLimiter: rate.NewLimiter(10, 10),
}
cc.DhtStartingNodes = func(network string) dht.StartingNodesGetter {
return func() ([]dht.Addr, error) { return dht.GlobalBootstrapAddrs(network) }