@@ -126,93 +126,95 @@ impl DnsResolve for DnsResolver {
126126 msgv6. set_recursion_desired ( true ) ;
127127 msgv6. add_query ( queryv6) ;
128128
129- let ( res_v4, res_v6) = future:: join ( self . lookup ( msgv4) , self . lookup ( msgv6) ) . await ;
130-
131- if res_v4. is_err ( ) && res_v6. is_err ( ) {
132- return if self . ipv6_first {
133- Err ( res_v6. unwrap_err ( ) )
134- } else {
135- Err ( res_v4. unwrap_err ( ) )
136- } ;
137- }
129+ match future:: join ( self . lookup ( msgv4) , self . lookup ( msgv6) ) . await {
130+ ( Err ( res_v4) , Err ( res_v6) ) => {
131+ if self . ipv6_first {
132+ Err ( res_v6)
133+ } else {
134+ Err ( res_v4)
135+ }
136+ }
138137
139- let mut vaddr = Vec :: new ( ) ;
140-
141- if self . ipv6_first {
142- match res_v6 {
143- Ok ( res) => {
144- for record in res. answers ( ) {
145- match * record. rdata ( ) {
146- RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
147- RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
148- ref rdata => {
149- trace ! ( "skipped rdata {:?}" , rdata) ;
138+ ( res_v4, res_v6) => {
139+ let mut vaddr = Vec :: new ( ) ;
140+
141+ if self . ipv6_first {
142+ match res_v6 {
143+ Ok ( res) => {
144+ for record in res. answers ( ) {
145+ match * record. rdata ( ) {
146+ RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
147+ RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
148+ ref rdata => {
149+ trace ! ( "skipped rdata {:?}" , rdata) ;
150+ }
151+ }
150152 }
151153 }
154+ Err ( err) => {
155+ debug ! ( "failed to resolve AAAA records, error: {}" , err) ;
156+ }
152157 }
153- }
154- Err ( err) => {
155- debug ! ( "failed to resolve AAAA records, error: {}" , err) ;
156- }
157- }
158158
159- match res_v4 {
160- Ok ( res) => {
161- for record in res. answers ( ) {
162- match * record. rdata ( ) {
163- RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
164- RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
165- ref rdata => {
166- trace ! ( "skipped rdata {:?}" , rdata) ;
159+ match res_v4 {
160+ Ok ( res) => {
161+ for record in res. answers ( ) {
162+ match * record. rdata ( ) {
163+ RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
164+ RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
165+ ref rdata => {
166+ trace ! ( "skipped rdata {:?}" , rdata) ;
167+ }
168+ }
167169 }
168170 }
171+ Err ( err) => {
172+ debug ! ( "failed to resolve A records, error: {}" , err) ;
173+ }
169174 }
170- }
171- Err ( err) => {
172- debug ! ( "failed to resolve A records, error: {}" , err) ;
173- }
174- }
175- } else {
176- match res_v4 {
177- Ok ( res) => {
178- for record in res. answers ( ) {
179- match * record. rdata ( ) {
180- RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
181- RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
182- ref rdata => {
183- trace ! ( "skipped rdata {:?}" , rdata) ;
175+ } else {
176+ match res_v4 {
177+ Ok ( res) => {
178+ for record in res. answers ( ) {
179+ match * record. rdata ( ) {
180+ RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
181+ RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
182+ ref rdata => {
183+ trace ! ( "skipped rdata {:?}" , rdata) ;
184+ }
185+ }
184186 }
185187 }
188+ Err ( err) => {
189+ debug ! ( "failed to resolve A records, error: {}" , err) ;
190+ }
186191 }
187- }
188- Err ( err) => {
189- debug ! ( "failed to resolve A records, error: {}" , err) ;
190- }
191- }
192192
193- match res_v6 {
194- Ok ( res) => {
195- for record in res. answers ( ) {
196- match * record. rdata ( ) {
197- RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
198- RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
199- ref rdata => {
200- trace ! ( "skipped rdata {:?}" , rdata) ;
193+ match res_v6 {
194+ Ok ( res) => {
195+ for record in res. answers ( ) {
196+ match * record. rdata ( ) {
197+ RData :: A ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
198+ RData :: AAAA ( addr) => vaddr. push ( SocketAddr :: new ( addr. into ( ) , port) ) ,
199+ ref rdata => {
200+ trace ! ( "skipped rdata {:?}" , rdata) ;
201+ }
202+ }
201203 }
202204 }
205+ Err ( err) => {
206+ debug ! ( "failed to resolve AAAA records, error: {}" , err) ;
207+ }
203208 }
204209 }
205- Err ( err) => {
206- debug ! ( "failed to resolve AAAA records, error: {}" , err) ;
210+
211+ if vaddr. is_empty ( ) {
212+ let err = io:: Error :: new ( ErrorKind :: InvalidData , "resolve empty" ) ;
213+ return Err ( err) ;
207214 }
208- }
209- }
210215
211- if vaddr. is_empty ( ) {
212- let err = io:: Error :: new ( ErrorKind :: InvalidData , "resolve empty" ) ;
213- return Err ( err) ;
216+ Ok ( vaddr)
217+ }
214218 }
215-
216- Ok ( vaddr)
217219 }
218220}
0 commit comments