in lib/torrent/scheduler/conn/conn.go [83:124]
func newConn(
config Config,
stats tally.Scope,
clk clock.Clock,
networkEvents networkevent.Producer,
bandwidth *bandwidth.Limiter,
events Events,
nc net.Conn,
localPeerID core.PeerID,
remotePeerID core.PeerID,
info *storage.TorrentInfo,
openedByRemote bool,
logger *zap.SugaredLogger) (*Conn, error) {
// Clear all deadlines set during handshake. Once a Conn is created, we
// rely on our own idle Conn management via preemption events.
if err := nc.SetDeadline(time.Time{}); err != nil {
return nil, fmt.Errorf("set deadline: %s", err)
}
c := &Conn{
peerID: remotePeerID,
infoHash: info.InfoHash(),
createdAt: clk.Now(),
localPeerID: localPeerID,
bandwidth: bandwidth,
events: events,
nc: nc,
config: config,
clk: clk,
stats: stats,
networkEvents: networkEvents,
openedByRemote: openedByRemote,
sender: make(chan *Message, config.SenderBufferSize),
receiver: make(chan *Message, config.ReceiverBufferSize),
closed: atomic.NewBool(false),
done: make(chan struct{}),
logger: logger,
}
return c, nil
}