Hi everyone,
I’m trying to use the HTTP client sample from NCS v3.0.2 with a W5500 Ethernet shield on an nRF5340. DHCP works fine, and I can successfully POST and GET using IP addresses. However, when I try to use domain names, DNS resolution fails.
Here is my prj.conf related to networking and DNS:
# Network driver config CONFIG_TEST_RANDOM_GENERATOR=y # Network buffers CONFIG_NET_MAX_CONN=10 CONFIG_NET_PKT_RX_COUNT=16 CONFIG_NET_PKT_TX_COUNT=16 CONFIG_NET_BUF_RX_COUNT=128 CONFIG_NET_BUF_TX_COUNT=128 CONFIG_NET_CONTEXT_NET_PKT_POOL=y # Networking core CONFIG_NETWORKING=y CONFIG_NET_L2_ETHERNET=y CONFIG_NET_IPV4=y CONFIG_NET_IPV6=n CONFIG_NET_UDP=y CONFIG_NET_TCP=y CONFIG_NET_SHELL=y # DHCP CONFIG_NET_DHCPV4=y CONFIG_NET_DHCPV4_OPTION_CALLBACKS=y # Ethernet CONFIG_ETH_W5500=y # SPI CONFIG_SPI=y # Sockets (MANDATORY) CONFIG_NET_SOCKETS=y CONFIG_NET_SOCKETS_OFFLOAD=n CONFIG_ZVFS_POLL_MAX=4 CONFIG_POSIX_API=y # HTTP client CONFIG_HTTP_CLIENT=y # DNS CONFIG_ZVFS_POLL_MAX=10 CONFIG_DNS_SERVER_IP_ADDRESSES=y CONFIG_DNS_RESOLVER_MAX_SERVERS=6 CONFIG_DNS_RESOLVER_MAX_QUERY_LEN=255 CONFIG_DNS_RESOLVER_AUTO_INIT=y CONFIG_DNS_RESOLVER=y CONFIG_DNS_SERVER1="8.8.8.8" CONFIG_DNS_SERVER2="1.1.1.1" # Logging CONFIG_LOG=y CONFIG_NET_LOG=y CONFIG_NET_SOCKETS_LOG_LEVEL_DBG=y CONFIG_NET_HTTP_LOG_LEVEL_DBG=y # Stack sizes (IMPORTANT for W5500) CONFIG_MAIN_STACK_SIZE=4096 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
What I have tried
-
Verified DHCP works and prints a valid IP, subnet, and gateway.
- Tried adding configs to resolve DNS.
-
Tried using
dns_resolve_init()with8.8.8.8and1.1.1.1— bus fault occurs if sockets are not managed properly. -
Checked
CONFIG_NET_SOCKETS_MAX— it is not defined in NCS v3.0.2, so I cannot increase max sockets. -
Tried limiting HTTP client to one socket at a time, opening DNS first — still fails with
net_dns_resolve: Cannot get socket (-106). -
Direct IP HTTP requests work perfectly.
Observations
-
Error from DNS resolver is either
-106(ENOBUFS, no free sockets) or-101(EALREADY). -
W5500 has only 8 hardware sockets, which seems to limit DNS + HTTP simultaneously.
-
I suspect DNS resolution fails because the DNS UDP socket cannot be allocated when the HTTP sockets are already opened.
Question
-
How can I make DNS resolution work reliably without switching to hardcoded IPs?