diff --git a/adapter/outbound/vmess.go b/adapter/outbound/vmess.go index 8d018caa5b..08fd9f3791 100644 --- a/adapter/outbound/vmess.go +++ b/adapter/outbound/vmess.go @@ -290,16 +290,6 @@ func (v *Vmess) ListenPacketContext(ctx context.Context, metadata *C.Metadata, o } return v.ListenPacketOnStreamConn(c, metadata) } - c, err = dialer.DialContext(ctx, "tcp", v.addr, v.Base.DialOptions(opts...)...) - if err != nil { - return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error()) - } - tcpKeepAlive(c) - defer func(c net.Conn) { - safeConnClose(c, err) - }(c) - - c, err = v.StreamConn(c, metadata) return v.ListenPacketWithDialer(ctx, dialer.NewDialer(v.Base.DialOptions(opts...)...), metadata) } @@ -316,9 +306,17 @@ func (v *Vmess) ListenPacketWithDialer(ctx context.Context, dialer C.Dialer, met c, err := dialer.DialContext(ctx, "tcp", v.addr) if err != nil { - return nil, fmt.Errorf("new vmess client error: %v", err) + return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error()) } + tcpKeepAlive(c) + defer func(c net.Conn) { + safeConnClose(c, err) + }(c) + c, err = v.StreamConn(c, metadata) + if err != nil { + return nil, fmt.Errorf("new vmess client error: %v", err) + } return v.ListenPacketOnStreamConn(c, metadata) }