From ef9259775e76c5f3d0c1f09d54d9b585c973316f Mon Sep 17 00:00:00 2001 From: "hrushikesh.bhosale" Date: Wed, 29 Jan 2025 12:19:23 +0530 Subject: [PATCH] fix(http_server): Simple http server socket len fix The socket address length is not typecasted properly while passing to bind and sendto functions. Due to this http_server/simple was not running with target linux on MacOS used to give error - I (132253266) port: Starting scheduler. I (132253269) esp_netif_loopback: loopback initialization I (132253269) example: Starting server on port: '8001' E (132253270) httpd: httpd_server_init: error in creating ctrl socket (22) I (132253270) example: Error starting server! With this commit, simple http server runs with target linux on MacOS for IPV4 configurations --- components/esp_http_server/src/util/ctrl_sock.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/components/esp_http_server/src/util/ctrl_sock.c b/components/esp_http_server/src/util/ctrl_sock.c index 05f228846c..74e09bd2ed 100644 --- a/components/esp_http_server/src/util/ctrl_sock.c +++ b/components/esp_http_server/src/util/ctrl_sock.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2018-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -41,18 +41,21 @@ int cs_create_ctrl_sock(int port) int ret; struct sockaddr_storage addr = {}; + socklen_t addr_len = 0; #if IPV4_ENABLED struct sockaddr_in *addr4 = (struct sockaddr_in *)&addr; addr4->sin_family = AF_INET; addr4->sin_port = htons(port); inet_aton("127.0.0.1", &addr4->sin_addr); + addr_len = sizeof(struct sockaddr_in); #else struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&addr; addr6->sin6_family = AF_INET6; addr6->sin6_port = htons(port); inet6_aton("::1", &addr6->sin6_addr); + addr_len = sizeof(struct sockaddr_in6); #endif - ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr)); + ret = bind(fd, (struct sockaddr *)&addr, addr_len); if (ret < 0) { close(fd); return -1; @@ -69,18 +72,21 @@ int cs_send_to_ctrl_sock(int send_fd, int port, void *data, unsigned int data_le { int ret; struct sockaddr_storage to_addr = {}; + socklen_t addr_len = 0; #if IPV4_ENABLED struct sockaddr_in *addr4 = (struct sockaddr_in *)&to_addr; addr4->sin_family = AF_INET; addr4->sin_port = htons(port); inet_aton("127.0.0.1", &addr4->sin_addr); + addr_len = sizeof(struct sockaddr_in); #else struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&to_addr; addr6->sin6_family = AF_INET6; addr6->sin6_port = htons(port); inet6_aton("::1", &addr6->sin6_addr); + addr_len = sizeof(struct sockaddr_in6); #endif - ret = sendto(send_fd, data, data_len, 0, (struct sockaddr *)&to_addr, sizeof(to_addr)); + ret = sendto(send_fd, data, data_len, 0, (struct sockaddr *)&to_addr, addr_len); if (ret < 0) { return -1;