API functions for name resolving.
#include "lwip/netdb.h"
#include "lwip/err.h"
#include "lwip/mem.h"
#include "lwip/memp.h"
#include "lwip/ip_addr.h"
#include "lwip/api.h"
#include "lwip/dns.h"
#include <string.h>
#include <stdlib.h>
Data Structures | |
struct | gethostbyname_r_helper |
helper struct for gethostbyname_r to access the char* buffer More... | |
Macros | |
#define | HOSTENT_STORAGE static |
define "hostent" variables storage More... | |
#define | LWIP_DNS_API_HOSTENT_STORAGE 0 |
define "hostent" variables storage: 0 if we use a static (but unprotected) set of variables for lwip_gethostbyname, 1 if we use a local storage More... | |
Functions | |
void | lwip_freeaddrinfo (struct addrinfo *ai) |
Frees one or more addrinfo structures returned by getaddrinfo(), along with any additional storage associated with those structures. More... | |
int | lwip_getaddrinfo (const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res) |
Translates the name of a service location (for example, a host name) and/or a service name and returns a set of socket addresses and associated information to be used in creating a socket with which to address the specified service. More... | |
struct hostent * | lwip_gethostbyname (const char *name) |
Returns an entry containing addresses of address family AF_INET for the host with name name. More... | |
int | lwip_gethostbyname_r (const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop) |
Thread-safe variant of lwip_gethostbyname: instead of using a static buffer, this function takes buffer and errno pointers as arguments and uses these for the result. More... | |
Variables | |
int | h_errno |
h_errno is exported in netdb.h for access by applications. More... | |
#define HOSTENT_STORAGE static |
define "hostent" variables storage
Referenced by lwip_gethostbyname().
#define LWIP_DNS_API_HOSTENT_STORAGE 0 |
define "hostent" variables storage: 0 if we use a static (but unprotected) set of variables for lwip_gethostbyname, 1 if we use a local storage
Frees one or more addrinfo structures returned by getaddrinfo(), along with any additional storage associated with those structures.
If the ai_next field of the structure is not null, the entire list of structures is freed.
ai | struct addrinfo to free |
References addrinfo::ai_next, memp_free(), next, and NULL.
int lwip_getaddrinfo | ( | const char * | nodename, |
const char * | servname, | ||
const struct addrinfo * | hints, | ||
struct addrinfo ** | res | ||
) |
Translates the name of a service location (for example, a host name) and/or a service name and returns a set of socket addresses and associated information to be used in creating a socket with which to address the specified service.
Memory for the result is allocated internally and must be freed by calling lwip_freeaddrinfo()!
Due to a limitation in dns_gethostbyname, only the first address of a host is returned. Also, service names are not supported (only port numbers)!
nodename | descriptive name or address string of the host (may be NULL -> local address) |
servname | port number as string of NULL |
hints | structure containing input values that set socktype and protocol |
res | pointer to a pointer where to store the result (set to NULL on failure) |
References AF_INET, AF_UNSPEC, addrinfo::ai_addr, addrinfo::ai_addrlen, addrinfo::ai_canonname, addrinfo::ai_family, addrinfo::ai_protocol, addrinfo::ai_socktype, EAI_FAIL, EAI_FAMILY, EAI_MEMORY, EAI_NONAME, EAI_SERVICE, ERR_OK, htons, inet_addr_from_ipaddr, ip_addr_set_loopback, LWIP_ASSERT, memp_malloc(), netconn_gethostbyname(), NETDB_ELEM_SIZE, NULL, sockaddr_in::sin_addr, sockaddr_in::sin_family, sockaddr_in::sin_len, and sockaddr_in::sin_port.
struct hostent* lwip_gethostbyname | ( | const char * | name | ) |
Returns an entry containing addresses of address family AF_INET for the host with name name.
Due to dns_gethostbyname limitations, only one address is returned.
name | the hostname to resolve |
References AF_INET, DNS_DEBUG, ERR_OK, hostent::h_addr_list, hostent::h_addrtype, hostent::h_aliases, h_errno, hostent::h_length, hostent::h_name, HOST_NOT_FOUND, HOSTENT_STORAGE, ip_ntoa, LWIP_DEBUGF, netconn_gethostbyname(), and NULL.
int lwip_gethostbyname_r | ( | const char * | name, |
struct hostent * | ret, | ||
char * | buf, | ||
size_t | buflen, | ||
struct hostent ** | result, | ||
int * | h_errnop | ||
) |
Thread-safe variant of lwip_gethostbyname: instead of using a static buffer, this function takes buffer and errno pointers as arguments and uses these for the result.
name | the hostname to resolve |
ret | pre-allocated struct where to store the result |
buf | pre-allocated buffer where to store additional data |
buflen | the size of buf |
result | pointer to a hostent pointer that is set to ret on success and set to zero on error |
h_errnop | pointer to an int where to store errors (instead of modifying the global h_errno) |
References gethostbyname_r_helper::addr, gethostbyname_r_helper::addr_list, AF_INET, gethostbyname_r_helper::aliases, DNS_DEBUG, EINVAL, ERANGE, ERR_OK, h, hostent::h_addr_list, hostent::h_addrtype, hostent::h_aliases, hostent::h_length, hostent::h_name, HOST_NOT_FOUND, LWIP_DEBUGF, LWIP_MEM_ALIGN, MEM_ALIGNMENT, netconn_gethostbyname(), and NULL.
int h_errno |
h_errno is exported in netdb.h for access by applications.
Referenced by lwip_gethostbyname().