Skip to content

Commit

Permalink
Use IPADDR6_INIT() macro to set connecting IPv6 address
Browse files Browse the repository at this point in the history
If LwIP is built with LWIP_IPV6_SCOPES, there is a 'zone' member in
struct ip6_addr which was not being initialized correctly, leading to
routing failures.

The tcp_connect() call would return ERR_RTE and we would completely fail
to report that error. All the user would see is 'Connecting to MQTT...'
over and over again.
  • Loading branch information
dwmw2 committed Sep 2, 2024
1 parent 54fcd10 commit 969dc98
Showing 1 changed file with 2 additions and 3 deletions.
5 changes: 2 additions & 3 deletions src/AsyncTCP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -729,9 +729,8 @@ bool AsyncClient::connect(IPAddress ip, uint16_t port){

#if LWIP_IPV6
bool AsyncClient::connect(IPv6Address ip, uint16_t port){
ip_addr_t addr;
addr.type = IPADDR_TYPE_V6;
memcpy(addr.u_addr.ip6.addr, static_cast<const uint32_t*>(ip), sizeof(uint32_t) * 4);
auto ipaddr = static_cast<const uint32_t*>(ip);
ip_addr_t addr = IPADDR6_INIT(ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);

return _connect(addr, port);
}
Expand Down

0 comments on commit 969dc98

Please sign in to comment.