add support for transient connections

This commit is contained in:
vyzo 2021-02-04 00:03:12 +02:00
parent 410e6bdbd0
commit 7eee7c00a6
2 changed files with 19 additions and 0 deletions

View File

@ -13,9 +13,11 @@ var DialPeerTimeout = 60 * time.Second
type noDialCtxKey struct{}
type dialPeerTimeoutCtxKey struct{}
type forceDirectDialCtxKey struct{}
type useTransientCtxKey struct{}
var noDial = noDialCtxKey{}
var forceDirectDial = forceDirectDialCtxKey{}
var useTransient = useTransientCtxKey{}
// EXPERIMENTAL
// WithForceDirectDial constructs a new context with an option that instructs the network
@ -66,3 +68,18 @@ func GetDialPeerTimeout(ctx context.Context) time.Duration {
func WithDialPeerTimeout(ctx context.Context, timeout time.Duration) context.Context {
return context.WithValue(ctx, dialPeerTimeoutCtxKey{}, timeout)
}
// WithUseTransient constructs a new context with an option that instructs to network
// that it is acceptable to use a transient connection when opening a new stream.
func WithUseTransient(ctx context.Context) context.Context {
return context.WithValue(ctx, useTransient, true)
}
// GetUseTransient returns true if the use transient option is set in the context.
func GetUseTransient(ctx context.Context) bool {
v := ctx.Value(useTransient)
if v != nil {
return true
}
return false
}

View File

@ -103,6 +103,8 @@ type Stat struct {
Direction Direction
// Opened is the timestamp when this connection was opened.
Opened time.Time
// Transient indicates that this connection is transient and may be closed soon
Transient bool
// Extra stores additional metadata about this connection.
Extra map[interface{}]interface{}
}