From 303beff5dd1aa42f9be45313a4381aa1ce45fb7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E6=89=87=E6=BB=91=E7=BF=94=E7=BF=BC?= Date: Tue, 6 Feb 2024 18:56:55 +0800 Subject: [PATCH] Fix SockOpt does not work in UDP --- transport/internet/system_dialer.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/transport/internet/system_dialer.go b/transport/internet/system_dialer.go index cdb6cb9c..2c2fdf85 100644 --- a/transport/internet/system_dialer.go +++ b/transport/internet/system_dialer.go @@ -66,6 +66,18 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne if err != nil { return nil, err } + if sockopt != nil || len(d.controllers) > 0 { + file, err := packetConn.(*net.UDPConn).File() + if err != nil { + return nil, err + } + fd := file.Fd() + if sockopt != nil { + 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, Dest: destAddr,