github.com/v2fly/v2ray-core/v4@v4.45.2/transport/internet/sockopt_linux_test.go (about) 1 package internet_test 2 3 import ( 4 "context" 5 "syscall" 6 "testing" 7 8 "github.com/v2fly/v2ray-core/v4/common" 9 "github.com/v2fly/v2ray-core/v4/common/net" 10 "github.com/v2fly/v2ray-core/v4/testing/servers/tcp" 11 . "github.com/v2fly/v2ray-core/v4/transport/internet" 12 ) 13 14 func TestSockOptMark(t *testing.T) { 15 t.Skip("requires CAP_NET_ADMIN") 16 17 tcpServer := tcp.Server{ 18 MsgProcessor: func(b []byte) []byte { 19 return b 20 }, 21 } 22 dest, err := tcpServer.Start() 23 common.Must(err) 24 defer tcpServer.Close() 25 26 const mark = 1 27 dialer := DefaultSystemDialer{} 28 conn, err := dialer.Dial(context.Background(), nil, dest, &SocketConfig{Mark: mark}) 29 common.Must(err) 30 defer conn.Close() 31 32 rawConn, err := conn.(*net.TCPConn).SyscallConn() 33 common.Must(err) 34 err = rawConn.Control(func(fd uintptr) { 35 m, err := syscall.GetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_MARK) 36 common.Must(err) 37 if mark != m { 38 t.Fatal("unexpected connection mark", m, " want ", mark) 39 } 40 }) 41 common.Must(err) 42 }