Merge pull request #572 from shadow750d6/master

Add `lazy_start` option.
This commit is contained in:
Toby 2023-02-18 20:42:40 -08:00 committed by GitHub
commit 13d46da998
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 15 deletions

View File

@ -136,6 +136,7 @@ func client(config *clientConfig) {
for { for {
try += 1 try += 1
c, err := cs.NewClient(config.Server, auth, tlsConfig, quicConfig, pktConnFunc, up, down, config.FastOpen, c, err := cs.NewClient(config.Server, auth, tlsConfig, quicConfig, pktConnFunc, up, down, config.FastOpen,
config.LazyStart,
func(err error) { func(err error) {
if config.QuitOnDisconnect { if config.QuitOnDisconnect {
logrus.WithFields(logrus.Fields{ logrus.WithFields(logrus.Fields{
@ -170,7 +171,11 @@ func client(config *clientConfig) {
} }
} }
defer client.Close() defer client.Close()
if config.LazyStart {
logrus.WithField("addr", config.Server).Info("Lazy start enabled, waiting for first connection")
} else {
logrus.WithField("addr", config.Server).Info("Connected") logrus.WithField("addr", config.Server).Info("Connected")
}
// Local // Local
errChan := make(chan error) errChan := make(chan error)

View File

@ -227,6 +227,7 @@ type clientConfig struct {
ReceiveWindow uint64 `json:"recv_window"` ReceiveWindow uint64 `json:"recv_window"`
DisableMTUDiscovery bool `json:"disable_mtu_discovery"` DisableMTUDiscovery bool `json:"disable_mtu_discovery"`
FastOpen bool `json:"fast_open"` FastOpen bool `json:"fast_open"`
LazyStart bool `json:"lazy_start"`
Resolver string `json:"resolver"` Resolver string `json:"resolver"`
ResolvePreference string `json:"resolve_preference"` ResolvePreference string `json:"resolve_preference"`
} }

View File

@ -49,7 +49,7 @@ type Client struct {
} }
func NewClient(serverAddr string, auth []byte, tlsConfig *tls.Config, quicConfig *quic.Config, func NewClient(serverAddr string, auth []byte, tlsConfig *tls.Config, quicConfig *quic.Config,
pktConnFunc pktconns.ClientPacketConnFunc, sendBPS uint64, recvBPS uint64, fastOpen bool, pktConnFunc pktconns.ClientPacketConnFunc, sendBPS uint64, recvBPS uint64, fastOpen bool, lazyStart bool,
quicReconnectFunc func(err error), quicReconnectFunc func(err error),
) (*Client, error) { ) (*Client, error) {
quicConfig.DisablePathMTUDiscovery = quicConfig.DisablePathMTUDiscovery || pmtud.DisablePathMTUDiscovery quicConfig.DisablePathMTUDiscovery = quicConfig.DisablePathMTUDiscovery || pmtud.DisablePathMTUDiscovery
@ -64,6 +64,9 @@ func NewClient(serverAddr string, auth []byte, tlsConfig *tls.Config, quicConfig
pktConnFunc: pktConnFunc, pktConnFunc: pktConnFunc,
quicReconnectFunc: quicReconnectFunc, quicReconnectFunc: quicReconnectFunc,
} }
if lazyStart {
return c, nil
}
if err := c.connect(); err != nil { if err := c.connect(); err != nil {
return nil, err return nil, err
} }
@ -182,6 +185,7 @@ func (c *Client) openStreamWithReconnect() (quic.Connection, quic.Stream, error)
if c.closed { if c.closed {
return nil, nil, ErrClosed return nil, nil, ErrClosed
} }
if c.quicConn != nil {
stream, err := c.quicConn.OpenStream() stream, err := c.quicConn.OpenStream()
if err == nil { if err == nil {
// All good // All good
@ -195,13 +199,14 @@ func (c *Client) openStreamWithReconnect() (quic.Connection, quic.Stream, error)
if c.quicReconnectFunc != nil { if c.quicReconnectFunc != nil {
c.quicReconnectFunc(err) c.quicReconnectFunc(err)
} }
}
// Permanent error, need to reconnect // Permanent error, need to reconnect
if err := c.connect(); err != nil { if err := c.connect(); err != nil {
// Still error, oops // Still error, oops
return nil, nil, err return nil, nil, err
} }
// We are not going to try again even if it still fails the second time // We are not going to try again even if it still fails the second time
stream, err = c.quicConn.OpenStream() stream, err := c.quicConn.OpenStream()
return c.quicConn, &qStream{stream}, err return c.quicConn, &qStream{stream}, err
} }