type Matcher …
type MatchWriter …
type ErrorHandler …
var _ …
type ErrNotMatched …
func (e ErrNotMatched) Error() string { … }
func (e ErrNotMatched) Temporary() bool { … }
func (e ErrNotMatched) Timeout() bool { … }
type errListenerClosed …
func (e errListenerClosed) Error() string { … }
func (e errListenerClosed) Temporary() bool { … }
func (e errListenerClosed) Timeout() bool { … }
var ErrListenerClosed …
var ErrServerClosed …
var noTimeout …
func New(l net.Listener) CMux { … }
type CMux …
type matchersListener …
type cMux …
func matchersToMatchWriters(matchers []Matcher) []MatchWriter { … }
func (m *cMux) Match(matchers ...Matcher) net.Listener { … }
func (m *cMux) MatchWithWriters(matchers ...MatchWriter) net.Listener { … }
func (m *cMux) SetReadTimeout(t time.Duration) { … }
func (m *cMux) Serve() error { … }
func (m *cMux) serve(c net.Conn, donec <-chan struct{ … }
func (m *cMux) Close() { … }
func (m *cMux) closeDoneChans() { … }
func (m *cMux) HandleError(h ErrorHandler) { … }
func (m *cMux) handleErr(err error) bool { … }
type muxListener …
func (l muxListener) Accept() (net.Conn, error) { … }
type MuxConn …
func newMuxConn(c net.Conn) *MuxConn { … }
func (m *MuxConn) Read(p []byte) (int, error) { … }
func (m *MuxConn) startSniffing() io.Reader { … }
func (m *MuxConn) doneSniffing() { … }