Improve: Better handling of TCP connections

This commit is contained in:
gVisor bot 2018-08-29 15:00:12 +08:00
parent 229d2bf93e
commit 32783047b1
4 changed files with 10 additions and 4 deletions

View file

@ -36,7 +36,7 @@ func (d *Direct) Generator(addr *C.Addr) (adapter C.ProxyAdapter, err error) {
if err != nil { if err != nil {
return return
} }
c.(*net.TCPConn).SetKeepAlive(true) tcpKeepAlive(c)
return &DirectAdapter{conn: c}, nil return &DirectAdapter{conn: c}, nil
} }

View file

@ -46,7 +46,7 @@ func (ss *ShadowSocks) Generator(addr *C.Addr) (adapter C.ProxyAdapter, err erro
if err != nil { if err != nil {
return nil, fmt.Errorf("%s connect error", ss.server) return nil, fmt.Errorf("%s connect error", ss.server)
} }
c.(*net.TCPConn).SetKeepAlive(true) tcpKeepAlive(c)
c = ss.cipher.StreamConn(c) c = ss.cipher.StreamConn(c)
_, err = c.Write(serializesSocksAddr(addr)) _, err = c.Write(serializesSocksAddr(addr))
return &ShadowsocksAdapter{conn: c}, err return &ShadowsocksAdapter{conn: c}, err

View file

@ -44,8 +44,7 @@ func (ss *Socks5) Generator(addr *C.Addr) (adapter C.ProxyAdapter, err error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("%s connect error", ss.addr) return nil, fmt.Errorf("%s connect error", ss.addr)
} }
c.(*net.TCPConn).SetKeepAlive(true) tcpKeepAlive(c)
if err := ss.sharkHand(addr, c); err != nil { if err := ss.sharkHand(addr, c); err != nil {
return nil, err return nil, err
} }

View file

@ -84,3 +84,10 @@ func selectFast(in chan interface{}) chan interface{} {
return out return out
} }
func tcpKeepAlive(c net.Conn) {
if tcp, ok := c.(*net.TCPConn); ok {
tcp.SetKeepAlive(true)
tcp.SetKeepAlivePeriod(3 * time.Minute)
}
}