mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00

The default is for connections to last forever[1]. This leads to fds leaking. I set the timeout so high by default so that watches don't have to keep retrying but perhaps we should set it slower. Tested on a cluster with lots of clients and it seems to have relieved the problem. [1] https://groups.google.com/forum/#!msg/golang-nuts/JFhGwh1q9xU/heh4J8pul3QJ
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package server
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/coreos/etcd/log"
|
|
)
|
|
|
|
const (
|
|
DefaultReadTimeout = float64((5 * time.Minute) / time.Second)
|
|
DefaultWriteTimeout = float64((5 * time.Minute) / time.Second)
|
|
)
|
|
|
|
// TLSServerConfig generates tls configuration based on TLSInfo
|
|
// If any error happens, this function will call log.Fatal
|
|
func TLSServerConfig(info *TLSInfo) *tls.Config {
|
|
if info.KeyFile == "" || info.CertFile == "" {
|
|
return nil
|
|
}
|
|
|
|
cfg, err := info.ServerConfig()
|
|
if err != nil {
|
|
log.Fatal("TLS info error: ", err)
|
|
}
|
|
return cfg
|
|
}
|
|
|
|
// NewListener creates a net.Listener
|
|
// If the given scheme is "https", it will use TLS config to set listener.
|
|
// If any error happens, this function will call log.Fatal
|
|
func NewListener(scheme, addr string, cfg *tls.Config) net.Listener {
|
|
if scheme == "https" {
|
|
l, err := newTLSListener(addr, cfg)
|
|
if err != nil {
|
|
log.Fatal("Failed to create TLS listener: ", err)
|
|
}
|
|
return l
|
|
}
|
|
|
|
l, err := newListener(addr)
|
|
if err != nil {
|
|
log.Fatal("Failed to create listener: ", err)
|
|
}
|
|
return l
|
|
}
|
|
|
|
func newListener(addr string) (net.Listener, error) {
|
|
if addr == "" {
|
|
addr = ":http"
|
|
}
|
|
l, e := net.Listen("tcp", addr)
|
|
if e != nil {
|
|
return nil, e
|
|
}
|
|
return l, nil
|
|
}
|
|
|
|
func newTLSListener(addr string, cfg *tls.Config) (net.Listener, error) {
|
|
if addr == "" {
|
|
addr = ":https"
|
|
}
|
|
|
|
conn, err := net.Listen("tcp", addr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return tls.NewListener(conn, cfg), nil
|
|
}
|