Source File
mux.go
Belonging Package
github.com/libp2p/go-libp2p/core/network
package networkimport ()// ErrReset is returned when reading or writing on a reset stream.var ErrReset = errors.New("stream reset")type StreamErrorCode uint32type StreamError struct {ErrorCode StreamErrorCodeRemote boolTransportError error}func ( *StreamError) () string {:= "local"if .Remote {= "remote"}if .TransportError != nil {return fmt.Sprintf("stream reset (%s): code: 0x%x: transport error: %s", , .ErrorCode, .TransportError)}return fmt.Sprintf("stream reset (%s): code: 0x%x", , .ErrorCode)}func ( *StreamError) ( error) bool {if , := .(*StreamError); {return .ErrorCode == .ErrorCode && .Remote == .Remote}return false}func ( *StreamError) () []error {return []error{ErrReset, .TransportError}}const (StreamNoError StreamErrorCode = 0StreamProtocolNegotiationFailed StreamErrorCode = 0x1001StreamResourceLimitExceeded StreamErrorCode = 0x1002StreamRateLimited StreamErrorCode = 0x1003StreamProtocolViolation StreamErrorCode = 0x1004StreamSupplanted StreamErrorCode = 0x1005StreamGarbageCollected StreamErrorCode = 0x1006StreamShutdown StreamErrorCode = 0x1007StreamGated StreamErrorCode = 0x1008StreamCodeOutOfRange StreamErrorCode = 0x1009)// MuxedStream is a bidirectional io pipe within a connection.type MuxedStream interface {io.Readerio.Writer// Close closes the stream.//// * Any buffered data for writing will be flushed.// * Future reads will fail.// * Any in-progress reads/writes will be interrupted.//// Close may be asynchronous and _does not_ guarantee receipt of the// data.//// Close closes the stream for both reading and writing.// Close is equivalent to calling `CloseRead` and `CloseWrite`. Importantly, Close will not wait for any form of acknowledgment.// If acknowledgment is required, the caller must call `CloseWrite`, then wait on the stream for a response (or an EOF),// then call Close() to free the stream object.//// When done with a stream, the user must call either Close() or `Reset()` to discard the stream, even after calling `CloseRead` and/or `CloseWrite`.io.Closer// CloseWrite closes the stream for writing but leaves it open for// reading.//// CloseWrite does not free the stream, users must still call Close or// Reset.CloseWrite() error// CloseRead closes the stream for reading but leaves it open for// writing.//// When CloseRead is called, all in-progress Read calls are interrupted with a non-EOF error and// no further calls to Read will succeed.//// The handling of new incoming data on the stream after calling this function is implementation defined.//// CloseRead does not free the stream, users must still call Close or// Reset.CloseRead() error// Reset closes both ends of the stream. Use this to tell the remote// side to hang up and go away.Reset() error// ResetWithError aborts both ends of the stream with `errCode`. `errCode` is sent// to the peer on a best effort basis. For transports that do not support sending// error codes to remote peer, the behavior is identical to calling ResetResetWithError(errCode StreamErrorCode) errorSetDeadline(time.Time) errorSetReadDeadline(time.Time) errorSetWriteDeadline(time.Time) error}// MuxedConn represents a connection to a remote peer that has been// extended to support stream multiplexing.//// A MuxedConn allows a single net.Conn connection to carry many logically// independent bidirectional streams of binary data.//// Together with network.ConnSecurity, MuxedConn is a component of the// transport.CapableConn interface, which represents a "raw" network// connection that has been "upgraded" to support the libp2p capabilities// of secure communication and stream multiplexing.type MuxedConn interface {// Close closes the stream muxer and the the underlying net.Conn.io.Closer// CloseWithError closes the connection with errCode. The errCode is sent// to the peer.CloseWithError(errCode ConnErrorCode) error// IsClosed returns whether a connection is fully closed, so it can// be garbage collected.IsClosed() bool// OpenStream creates a new stream.OpenStream(context.Context) (MuxedStream, error)// AcceptStream accepts a stream opened by the other side.AcceptStream() (MuxedStream, error)}// Multiplexer wraps a net.Conn with a stream multiplexing// implementation and returns a MuxedConn that supports opening// multiple streams over the underlying net.Conntype Multiplexer interface {// NewConn constructs a new connectionNewConn(c net.Conn, isServer bool, scope PeerScope) (MuxedConn, error)}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |