diff --git a/transport/internet/system_dialer.go b/transport/internet/system_dialer.go index 924f364c..3c9239e8 100644 --- a/transport/internet/system_dialer.go +++ b/transport/internet/system_dialer.go @@ -2,7 +2,6 @@ package internet import ( "context" - "runtime" "syscall" "time" @@ -67,17 +66,16 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne if err != nil { return nil, err } - if runtime.GOOS != "windows" && (sockopt != nil || len(d.controllers) > 0) { - file, err := packetConn.(*net.UDPConn).File() + if sockopt != nil { + sys, err := packetConn.(*net.UDPConn).SyscallConn() if err != nil { return nil, err } - fd := file.Fd() - if sockopt != nil { + sys.Control(func(fd uintptr) { if err := applyOutboundSocketOptions("udp", dest.NetAddr(), fd, sockopt); err != nil { newError("failed to apply socket options").Base(err).WriteToLog(session.ExportIDToError(ctx)) } - } + }) } return &PacketConnWrapper{ Conn: packetConn,