mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-06-29 18:45:23 +00:00
40 lines
917 B
Go
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
|
|
}
|