@@ -73,7 +73,7 @@ func (d *ResolveDialer) ListenPacket(ctx context.Context, destination M.Socksadd
if err != nil {
return nil, err
}
- return bufio.NewNATPacketConn(bufio.NewPacketConn(conn), destination, M.SocksaddrFrom(destinationAddress, destination.Port)), nil
+ return bufio.NewNATPacketConn(bufio.NewPacketConn(conn), M.SocksaddrFrom(destinationAddress, destination.Port), destination), nil
func (d *ResolveDialer) Upstream() any {
@@ -413,7 +413,11 @@ func (c *ClientPacketAddrConn) ReadFrom(p []byte) (n int, addr net.Addr, err err
return
- addr = destination.UDPAddr()
+ if destination.IsFqdn() {
+ addr = destination
+ } else {
+ addr = destination.UDPAddr()
+ }
var length uint16
err = binary.Read(c.ExtendedConn, binary.BigEndian, &length)
@@ -498,7 +498,12 @@ func (c *PacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) {
n = copy(p, msg.Data)
- addr = M.ParseSocksaddrHostPort(msg.Host, msg.Port).UDPAddr()
+ destination := M.ParseSocksaddrHostPort(msg.Host, msg.Port)
@@ -131,7 +131,11 @@ func (c *ClientPacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)
n = buffer.Len()
@@ -196,7 +196,11 @@ func (c *PacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) {
- addr = c.destination.UDPAddr()
+ if c.destination.IsFqdn() {
+ addr = c.destination
+ addr = c.destination.UDPAddr()
@@ -146,7 +146,11 @@ func (c *serverPacketConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)