mirror of
https://github.com/libp2p/go-libp2p.git
synced 2025-09-26 20:21:26 +08:00
fix(libp2phttp): bound NewStream timeout (#3225)
This commit is contained in:
@@ -45,6 +45,10 @@ const LegacyWellKnownProtocols = "/.well-known/libp2p"
|
||||
const peerMetadataLimit = 8 << 10 // 8KB
|
||||
const peerMetadataLRUSize = 256 // How many different peer's metadata to keep in our LRU cache
|
||||
|
||||
// DefaultNewStreamTimeout is the default value for new stream establishing timeout.
|
||||
// It is the same value as basic_host.DefaultNegotiationTimeout
|
||||
var DefaultNewStreamTimeout = 10 * time.Second
|
||||
|
||||
type clientPeerIDContextKey struct{}
|
||||
type serverPeerIDContextKey struct{}
|
||||
|
||||
@@ -496,7 +500,16 @@ func (rt *streamRoundTripper) RoundTrip(r *http.Request) (*http.Response, error)
|
||||
})
|
||||
}
|
||||
|
||||
s, err := rt.h.NewStream(r.Context(), rt.server, ProtocolIDForMultistreamSelect)
|
||||
// If r.Context() timeout is greater than DefaultNewStreamTimeout
|
||||
// use DefaultNewStreamTimeout for new stream negotiation.
|
||||
newStreamCtx := r.Context()
|
||||
if deadline, ok := newStreamCtx.Deadline(); !ok || deadline.After(time.Now().Add(DefaultNewStreamTimeout)) {
|
||||
var cancel context.CancelFunc
|
||||
newStreamCtx, cancel = context.WithTimeout(context.Background(), DefaultNewStreamTimeout)
|
||||
defer cancel()
|
||||
}
|
||||
|
||||
s, err := rt.h.NewStream(newStreamCtx, rt.server, ProtocolIDForMultistreamSelect)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user