1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-29 02:35:23 +00:00
v2fly/transport/internet/system_listener.go
2018-09-10 13:23:27 +02:00

40 lines
917 B
Go

package internet
import (
"context"
"v2ray.com/core/common/net"
"v2ray.com/core/common/session"
)
var (
effectiveTCPListener = DefaultTCPListener{}
)
type DefaultTCPListener struct{}
func (tl *DefaultTCPListener) Listen(ctx context.Context, addr *net.TCPAddr) (*net.TCPListener, error) {
l, err := net.ListenTCP("tcp", addr)
if err != nil {
return nil, err
}
streamSettings := StreamSettingsFromContext(ctx)
if streamSettings != nil && streamSettings.SocketSettings != nil {
config := streamSettings.SocketSettings
rawConn, err := l.SyscallConn()
if err != nil {
return nil, err
}
if err := rawConn.Control(func(fd uintptr) {
if err := applyInboundSocketOptions("tcp", fd, config); err != nil {
newError("failed to apply socket options to incoming connection").Base(err).WriteToLog(session.ExportIDToError(ctx))
}
}); err != nil {
return nil, err
}
}
return l, nil
}