fix: doq maybe crash when use adapter

This commit is contained in:
Skyxim 2022-06-06 21:45:08 +08:00
parent e995003c27
commit 8343c3597e
2 changed files with 10 additions and 2 deletions

View file

@ -7,13 +7,13 @@ import (
"fmt" "fmt"
"github.com/Dreamacro/clash/component/dialer" "github.com/Dreamacro/clash/component/dialer"
"github.com/Dreamacro/clash/component/resolver" "github.com/Dreamacro/clash/component/resolver"
"github.com/lucas-clemente/quic-go"
"net" "net"
"strconv" "strconv"
"sync" "sync"
"time" "time"
"github.com/Dreamacro/clash/log" "github.com/Dreamacro/clash/log"
"github.com/lucas-clemente/quic-go"
D "github.com/miekg/dns" D "github.com/miekg/dns"
) )
@ -174,7 +174,7 @@ func (dc *quicClient) openSession() (quic.Connection, error) {
wrapConn, ok := conn.(*wrapPacketConn) wrapConn, ok := conn.(*wrapPacketConn)
if !ok { if !ok {
return nil, fmt.Errorf("quio create packet failed") return nil, fmt.Errorf("quic create packet failed")
} }
udp = wrapConn udp = wrapConn

View file

@ -143,6 +143,14 @@ func (wpc *wrapPacketConn) RemoteAddr() net.Addr {
return wpc.rAddr return wpc.rAddr
} }
func (wpc *wrapPacketConn) LocalAddr() net.Addr {
if wpc.PacketConn.LocalAddr() == nil {
return &net.UDPAddr{IP: net.IPv4zero, Port: 0}
} else {
return wpc.PacketConn.LocalAddr()
}
}
func dialContextExtra(ctx context.Context, adapterName string, network string, dstIP netip.Addr, port string, opts ...dialer.Option) (net.Conn, error) { func dialContextExtra(ctx context.Context, adapterName string, network string, dstIP netip.Addr, port string, opts ...dialer.Option) (net.Conn, error) {
adapter, ok := tunnel.Proxies()[adapterName] adapter, ok := tunnel.Proxies()[adapterName]
if !ok { if !ok {