func NewKeepAliveListener(l net.Listener, scheme string, tlscfg *tls.Config) (net.Listener, error) {
	if scheme == "https" {
		if tlscfg == nil {
			return nil, fmt.Errorf("cannot listen on TLS for given listener: KeyFile and CertFile are not presented")
		}
		return newTLSKeepaliveListener(l, tlscfg), nil
	}

	return &keepaliveListener{
		Listener: l,
	}, nil
}
func NewKeepAliveListener(l net.Listener, scheme string, tlscfg *tls.Config) (net.Listener, error) {
	if scheme == "https" {
		if tlscfg == nil {
			return nil, fmt.Errorf("cannot listen on TLS for given listener: KeyFile and CertFile are not presented")
		}
		return newTLSKeepaliveListener(l, tlscfg), nil
	}

	return &keepaliveListener{
		Listener: l,
	}, nil
}
func NewKeepAliveListener ( l net . Listener , scheme string , tlscfg * tls . Config ) ( net . Listener , error ) { if scheme == " " { if tlscfg == nil { return nil , fmt . Errorf ( " " ) } return newTLSKeepaliveListener ( l , tlscfg ) , nil } return & keepaliveListener { Listener : l , } , nil }
// NewKeepAliveListener returns a listener that listens on the given address.
// Be careful when wrap around KeepAliveListener with another Listener if TLSInfo is not nil.
// Some pkgs (like go/http) might expect Listener to return TLSConn type to start TLS handshake.
// http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html
NewKeepAliveListener returns a listener that listens on the given address . Be careful when wrap around KeepAliveListener with another Listener if TLSInfo is not nil . Some pkgs ( like go / http ) might expect Listener to return TLSConn type to start TLS handshake . http : // tldp . org / HOWTO / TCP - Keepalive - HOWTO / overview . html