@@ -8,13 +8,20 @@ import "time"
88func CreateDialer (bind net.Addr , fwmark int , dscp int ) * net.Dialer {
99
1010 // callback from dialer creation
11- var controlCallback = func (network , address string , c syscall.RawConn ) error {
11+ var ctrlCallback = func (network , address string , c syscall.RawConn ) error {
1212 return c .Control (func (fd uintptr ) {
13- f := int (fd )
14- // log.Printf("open %s socket (fd=%d)", network, f)
15- err := syscall .SetsockoptInt (f , syscall .SOL_SOCKET , syscall .SO_MARK , fwmark )
16- if err != nil {
17- fmt .Println ("set fwmark failed:" , err )
13+ var err error
14+ if fwmark != 0 {
15+ err = syscall .SetsockoptInt (int (fd ), syscall .SOL_SOCKET , syscall .SO_MARK , fwmark )
16+ if err != nil {
17+ fmt .Println ("set fwmark failed:" , err )
18+ }
19+ }
20+ if dscp != 0 {
21+ err = syscall .SetsockoptInt (int (fd ), syscall .IPPROTO_IP , syscall .IP_TOS , dscp << 2 )
22+ if err != nil {
23+ fmt .Println ("set dscp failed:" , err )
24+ }
1825 }
1926 })
2027 }
@@ -24,9 +31,7 @@ func CreateDialer(bind net.Addr, fwmark int, dscp int) *net.Dialer {
2431 Timeout : time .Duration (time .Second * 30 ),
2532 }
2633
27- if fwmark != 0 {
28- dialer .Control = controlCallback
29- }
34+ dialer .Control = ctrlCallback
3035
3136 return dialer
3237}
0 commit comments