mirror of
https://github.com/fluencelabs/tendermint
synced 2025-05-27 21:21:20 +00:00
This is a maintenance change to move the private validator package out of the types and to a top-level location. There is no good reason to keep it under the types and it will more clearly coommunicate where additions related to the privval belong. It leaves the interface and the mock in types for now as it would introduce circular dependency between privval and types, this should be resolved eventually. * mv priv_validator to privval pkg * use consistent `privval` as import Follow-up to #1255
67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
package privval
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
)
|
|
|
|
// timeoutError can be used to check if an error returned from the netp package
|
|
// was due to a timeout.
|
|
type timeoutError interface {
|
|
Timeout() bool
|
|
}
|
|
|
|
// tcpTimeoutListener implements net.Listener.
|
|
var _ net.Listener = (*tcpTimeoutListener)(nil)
|
|
|
|
// tcpTimeoutListener wraps a *net.TCPListener to standardise protocol timeouts
|
|
// and potentially other tuning parameters.
|
|
type tcpTimeoutListener struct {
|
|
*net.TCPListener
|
|
|
|
acceptDeadline time.Duration
|
|
connDeadline time.Duration
|
|
period time.Duration
|
|
}
|
|
|
|
// newTCPTimeoutListener returns an instance of tcpTimeoutListener.
|
|
func newTCPTimeoutListener(
|
|
ln net.Listener,
|
|
acceptDeadline, connDeadline time.Duration,
|
|
period time.Duration,
|
|
) tcpTimeoutListener {
|
|
return tcpTimeoutListener{
|
|
TCPListener: ln.(*net.TCPListener),
|
|
acceptDeadline: acceptDeadline,
|
|
connDeadline: connDeadline,
|
|
period: period,
|
|
}
|
|
}
|
|
|
|
// Accept implements net.Listener.
|
|
func (ln tcpTimeoutListener) Accept() (net.Conn, error) {
|
|
err := ln.SetDeadline(time.Now().Add(ln.acceptDeadline))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tc, err := ln.AcceptTCP()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := tc.SetDeadline(time.Now().Add(ln.connDeadline)); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := tc.SetKeepAlive(true); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := tc.SetKeepAlivePeriod(ln.period); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return tc, nil
|
|
}
|