func newConn()

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
}