mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 20:51:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
 | |
|  *
 | |
|  * SPDX-License-Identifier: Apache-2.0
 | |
|  */
 | |
| 
 | |
| #include <netdb.h>
 | |
| 
 | |
| 
 | |
| int esp_getaddrinfo(const char *nodename, const char *servname,
 | |
|                                const struct addrinfo *hints, struct addrinfo **res)
 | |
| {
 | |
|     struct addrinfo hints_copy = *hints;
 | |
|     struct addrinfo *res4 = NULL, *res6 = NULL;
 | |
|     int ret4, ret6;
 | |
| 
 | |
|     if (hints->ai_family == AF_UNSPEC) {
 | |
|         // Attempt to get IPv4 addresses
 | |
|         hints_copy.ai_family = AF_INET;
 | |
|         ret4 = lwip_getaddrinfo(nodename, servname, &hints_copy, &res4);
 | |
| 
 | |
|         // Attempt to get IPv6 addresses
 | |
|         hints_copy.ai_family = AF_INET6;
 | |
|         ret6 = lwip_getaddrinfo(nodename, servname, &hints_copy, &res6);
 | |
| 
 | |
|         // Handle results
 | |
|         if (ret4 != 0 && ret6 != 0) {
 | |
|             return ret4;  // Both calls failed, return the first error code
 | |
|         }
 | |
| 
 | |
|         *res = res4 ? res4 : res6;  // Start with the non-NULL result
 | |
| 
 | |
|         if (res4 && res6) {
 | |
|             // Append IPv6 list to the end of IPv4 list
 | |
|             struct addrinfo *last = res4;
 | |
|             while (last->ai_next) {
 | |
|                 last = last->ai_next;
 | |
|             }
 | |
|             last->ai_next = res6;
 | |
|         }
 | |
| 
 | |
|         return ERR_OK;  // Success
 | |
|     } else if ((hints->ai_family == AF_INET) || (hints->ai_family == AF_INET6)) {
 | |
|         return lwip_getaddrinfo(nodename, servname, hints, res);
 | |
|     }
 | |
| 
 | |
|     // Handle unsupported cases
 | |
|     return EAI_FAMILY;
 | |
| }
 | 
