package ssh

import (
	
	
	
)

type serverConn struct {
	net.Conn

	idleTimeout   time.Duration
	maxDeadline   time.Time
	closeCanceler context.CancelFunc
}

func ( *serverConn) ( []byte) ( int,  error) {
	.updateDeadline()
	,  = .Conn.Write()
	if ,  := .(net.Error);  && .closeCanceler != nil {
		.closeCanceler()
	}
	return
}

func ( *serverConn) ( []byte) ( int,  error) {
	.updateDeadline()
	,  = .Conn.Read()
	if ,  := .(net.Error);  && .closeCanceler != nil {
		.closeCanceler()
	}
	return
}

func ( *serverConn) () ( error) {
	 = .Conn.Close()
	if .closeCanceler != nil {
		.closeCanceler()
	}
	return
}

func ( *serverConn) () {
	switch {
	case .idleTimeout > 0:
		 := time.Now().Add(.idleTimeout)
		if .Unix() < .maxDeadline.Unix() || .maxDeadline.IsZero() {
			.Conn.SetDeadline()
			return
		}
		fallthrough
	default:
		.Conn.SetDeadline(.maxDeadline)
	}
}