Documentation
¶
Index ¶
- type Config
- type Cookie
- type Listener
- func Listen(pconn net.PacketConn, tlsConf *tls.Config, config *Config) (Listener, error)
- func ListenAddr(addr string, tlsConf *tls.Config, config *Config) (Listener, error)
- func ListenAddrImpl(addr string, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager) (Listener, error)
- func ListenImpl(pconn net.PacketConn, tlsConf *tls.Config, config *Config, ...) (Listener, error)
- type NonFWSession
- type Priority
- type Session
- type Stream
- type StreamID
- type VersionNumber
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// The QUIC versions that can be negotiated.
// If not set, it uses all versions available.
// Warning: This API should not be considered stable and will change soon.
Versions []VersionNumber
// Ask the server to truncate the connection ID sent in the Public Header.
// This saves 8 bytes in the Public Header in every packet. However, if the IP address of the server changes, the connection cannot be migrated.
// Currently only valid for the client.
RequestConnectionIDTruncation bool
// HandshakeTimeout is the maximum duration that the cryptographic handshake may take.
// If the timeout is exceeded, the connection is closed.
// If this value is zero, the timeout is set to 10 seconds.
HandshakeTimeout time.Duration
// IdleTimeout is the maximum duration that may pass without any incoming network activity.
// This value only applies after the handshake has completed.
// If the timeout is exceeded, the connection is closed.
// If this value is zero, the timeout is set to 30 seconds.
IdleTimeout time.Duration
// AcceptCookie determines if a Cookie is accepted.
// It is called with cookie = nil if the client didn't send an Cookie.
// If not set, it verifies that the address matches, and that the Cookie was issued within the last 24 hours.
// This option is only valid for the server.
AcceptCookie func(clientAddr net.Addr, cookie *Cookie) bool
// MaxReceiveStreamFlowControlWindow is the maximum stream-level flow control window for receiving data.
// If this value is zero, it will default to 1 MB for the server and 6 MB for the client.
MaxReceiveStreamFlowControlWindow uint64
// MaxReceiveConnectionFlowControlWindow is the connection-level flow control window for receiving data.
// If this value is zero, it will default to 1.5 MB for the server and 15 MB for the client.
MaxReceiveConnectionFlowControlWindow uint64
// KeepAlive defines whether this peer will periodically send PING frames to keep the connection alive.
KeepAlive bool
// Should we cache handshake parameters? If no cache available, should we create one?
CacheHandshake bool
// Should the host try to create new paths, if possible?
CreatePaths bool
// BindAddress is the local address used to establish the connection.
BindAddr string
// Path scheduler, default LowLatency
PathScheduler string
// Stream scheduler, default Round Robin
StreamScheduler string
}
Config contains all configuration data needed for a QUIC server or client.
type Listener ¶
type Listener interface {
// Close the server, sending CONNECTION_CLOSE frames to each peer.
Close() error
// Addr returns the local network addr that the server is listening on.
Addr() net.Addr
// Accept returns new sessions. It should be called in a loop.
Accept() (Session, error)
}
A Listener for incoming QUIC connections
func Listen ¶
Listen listens for QUIC connections on a given net.PacketConn. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil.
func ListenAddr ¶
ListenAddr creates a QUIC server listening on a given address. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil.
func ListenAddrImpl ¶
func ListenAddrImpl(addr string, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager) (Listener, error)
ListenAddrImpl creates a QUIC server listening on a given address. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil. The pconnManager may be nil
func ListenImpl ¶
func ListenImpl(pconn net.PacketConn, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager) (Listener, error)
ListenImpl listens for QUIC connections on a given net.PacketConn. The listener is not active until Serve() is called. The tls.Config must not be nil, the quic.Config may be nil. pconnManager may be nil
type NonFWSession ¶
A NonFWSession is a QUIC connection between two peers half-way through the handshake. The communication is encrypted, but not yet forward secure.
func DialAddrNonFWSecure ¶
DialAddrNonFWSecure establishes a new QUIC connection to a server. The hostname for SNI is taken from the given address.
func DialNonFWSecure ¶
func DialNonFWSecure( pconn net.PacketConn, remoteAddr net.Addr, host string, tlsConf *tls.Config, config *Config, pconnMgrArg *pconnManager, ) (NonFWSession, error)
DialNonFWSecure establishes a new non-forward-secure QUIC connection to a server using a net.PacketConn. The host parameter is used for SNI.
type Session ¶
type Session interface {
// AcceptStream returns the next stream opened by the peer, blocking until one is available.
// Since stream 1 is reserved for the crypto stream, the first stream is either 2 (for a client) or 3 (for a server).
AcceptStream() (Stream, error)
// OpenStream opens a new QUIC stream, returning a special error when the peer's concurrent stream limit is reached.
// New streams always have the smallest possible stream ID.
// TODO: Enable testing for the special error
OpenStream() (Stream, error)
// OpenStreamSync opens a new QUIC stream, blocking until the peer's concurrent stream limit allows a new stream to be opened.
// It always picks the smallest possible stream ID.
OpenStreamSync() (Stream, error)
// LocalAddr returns the local address.
LocalAddr() net.Addr
// RemoteAddr returns the address of the peer.
RemoteAddr() net.Addr
// Close closes the connection. The error will be sent to the remote peer in a CONNECTION_CLOSE frame. An error value of nil is allowed and will cause a normal PeerGoingAway to be sent.
Close(error) error
// The context is cancelled when the session is closed.
// Warning: This API should not be considered stable and might change soon.
Context() context.Context
}
A Session is a QUIC connection between two peers.
type Stream ¶
type Stream interface {
// Read reads data from the stream.
// Read can be made to time out and return a net.Error with Timeout() == true
// after a fixed time limit; see SetDeadline and SetReadDeadline.
io.Reader
// Write writes data to the stream.
// Write can be made to time out and return a net.Error with Timeout() == true
// after a fixed time limit; see SetDeadline and SetWriteDeadline.
io.Writer
io.Closer
StreamID() StreamID
// Reset closes the stream with an error.
Reset(error)
// The context is canceled as soon as the write-side of the stream is closed.
// This happens when Close() is called, or when the stream is reset (either locally or remotely).
// Warning: This API should not be considered stable and might change soon.
Context() context.Context
// SetReadDeadline sets the deadline for future Read calls and
// any currently-blocked Read call.
// A zero value for t means Read will not time out.
SetReadDeadline(t time.Time) error
// SetWriteDeadline sets the deadline for future Write calls
// and any currently-blocked Write call.
// Even if write times out, it may return n > 0, indicating that
// some of the data was successfully written.
// A zero value for t means Write will not time out.
SetWriteDeadline(t time.Time) error
// SetDeadline sets the read and write deadlines associated
// with the connection. It is equivalent to calling both
// SetReadDeadline and SetWriteDeadline.
SetDeadline(t time.Time) error
// GetBytesSent returns the number of bytes of the stream that were sent to the peer
GetBytesSent() (protocol.ByteCount, error)
// GetBytesRetrans returns the number of bytes of the stream that were retransmitted to the peer
GetBytesRetrans() (protocol.ByteCount, error)
}
Stream is the interface implemented by QUIC streams
type VersionNumber ¶
type VersionNumber = protocol.VersionNumber
A VersionNumber is a QUIC version number.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
client
command
|
|
|
client_benchmarker
command
|
|
|
client_benchmarker_cached
command
|
|
|
echo
command
|
|
|
reqres
command
|
|
|
reqres/client
command
|
|
|
integrationtests
|
|
|
internal
|
|