improve ss
This commit is contained in:
67
pkg/listener/tcp/listener.go
Normal file
67
pkg/listener/tcp/listener.go
Normal 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
|
||||
}
|
17
pkg/listener/tcp/metadata.go
Normal file
17
pkg/listener/tcp/metadata.go
Normal 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
|
||||
}
|
Reference in New Issue
Block a user