From 424ea9f5e42c50b40faf7c70bf443999e47e9b68 Mon Sep 17 00:00:00 2001 From: Marcin Niestroj Date: Mon, 8 Apr 2024 18:13:35 +0200 Subject: [PATCH] drivers: wifi: esp_at: do not connect socket on bind(INADDR_ANY) All connect() syscalls result in EISCONN error, since underlying _sock_connect() is attempted to be called twice. Once from net_context.c' bind_default() (with INADDR_ANY) as part of esp_bind() and second time as part of esp_connect(). Do not call _sock_connect() from esp_bind(INADDR_ANY), which happens as part of connect(). Fixes: dbf3d6e9110a ("drivers: esp_at: implement bind() and recvfrom() for UDP sockets") Signed-off-by: Marcin Niestroj --- drivers/wifi/esp_at/esp_offload.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/wifi/esp_at/esp_offload.c b/drivers/wifi/esp_at/esp_offload.c index 96e2b143a21..31c59d11fc7 100644 --- a/drivers/wifi/esp_at/esp_offload.c +++ b/drivers/wifi/esp_at/esp_offload.c @@ -110,8 +110,14 @@ static int esp_bind(struct net_context *context, const struct sockaddr *addr, } if (IS_ENABLED(CONFIG_NET_IPV4) && addr->sa_family == AF_INET) { + struct sockaddr_in *addr4 = (struct sockaddr_in *)addr; + LOG_DBG("link %d", sock->link_id); + if (addr4->sin_addr.s_addr == INADDR_ANY) { + return 0; + } + if (esp_socket_connected(sock)) { return -EISCONN; }