improve ss

This commit is contained in:
ginuerzh
2021-11-01 21:57:28 +08:00
parent e2995ece96
commit ec8615991b
71 changed files with 554 additions and 316 deletions

View File

@ -0,0 +1,67 @@
package tcp
import (
"net"
"github.com/go-gost/gost/pkg/internal/utils"
"github.com/go-gost/gost/pkg/listener"
"github.com/go-gost/gost/pkg/logger"
md "github.com/go-gost/gost/pkg/metadata"
"github.com/go-gost/gost/pkg/registry"
)
func init() {
registry.RegisterListener("tcp", NewListener)
}
type tcpListener struct {
addr string
md metadata
net.Listener
logger logger.Logger
}
func NewListener(opts ...listener.Option) listener.Listener {
options := &listener.Options{}
for _, opt := range opts {
opt(options)
}
return &tcpListener{
addr: options.Addr,
logger: options.Logger,
}
}
func (l *tcpListener) Init(md md.Metadata) (err error) {
if err = l.parseMetadata(md); err != nil {
return
}
laddr, err := net.ResolveTCPAddr("tcp", l.addr)
if err != nil {
return
}
ln, err := net.ListenTCP("tcp", laddr)
if err != nil {
return
}
if l.md.keepAlive {
l.Listener = &utils.TCPKeepAliveListener{
TCPListener: ln,
KeepAlivePeriod: l.md.keepAlivePeriod,
}
return
}
l.Listener = ln
l.logger.Info("listening on:", l.Listener.Addr())
return
}
func (l *tcpListener) parseMetadata(md md.Metadata) (err error) {
l.md.keepAlive = md.GetBool(keepAlive)
l.md.keepAlivePeriod = md.GetDuration(keepAlivePeriod)
return
}

View File

@ -0,0 +1,17 @@
package tcp
import "time"
const (
keepAlive = "keepAlive"
keepAlivePeriod = "keepAlivePeriod"
)
const (
defaultKeepAlivePeriod = 180 * time.Second
)
type metadata struct {
keepAlive bool
keepAlivePeriod time.Duration
}