forked from espressif/esp-idf
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
This commit is contained in:
@ -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
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -41,18 +41,21 @@ int cs_create_ctrl_sock(int port)
|
|||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
struct sockaddr_storage addr = {};
|
struct sockaddr_storage addr = {};
|
||||||
|
socklen_t addr_len = 0;
|
||||||
#if IPV4_ENABLED
|
#if IPV4_ENABLED
|
||||||
struct sockaddr_in *addr4 = (struct sockaddr_in *)&addr;
|
struct sockaddr_in *addr4 = (struct sockaddr_in *)&addr;
|
||||||
addr4->sin_family = AF_INET;
|
addr4->sin_family = AF_INET;
|
||||||
addr4->sin_port = htons(port);
|
addr4->sin_port = htons(port);
|
||||||
inet_aton("127.0.0.1", &addr4->sin_addr);
|
inet_aton("127.0.0.1", &addr4->sin_addr);
|
||||||
|
addr_len = sizeof(struct sockaddr_in);
|
||||||
#else
|
#else
|
||||||
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&addr;
|
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&addr;
|
||||||
addr6->sin6_family = AF_INET6;
|
addr6->sin6_family = AF_INET6;
|
||||||
addr6->sin6_port = htons(port);
|
addr6->sin6_port = htons(port);
|
||||||
inet6_aton("::1", &addr6->sin6_addr);
|
inet6_aton("::1", &addr6->sin6_addr);
|
||||||
|
addr_len = sizeof(struct sockaddr_in6);
|
||||||
#endif
|
#endif
|
||||||
ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
|
ret = bind(fd, (struct sockaddr *)&addr, addr_len);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
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;
|
int ret;
|
||||||
struct sockaddr_storage to_addr = {};
|
struct sockaddr_storage to_addr = {};
|
||||||
|
socklen_t addr_len = 0;
|
||||||
#if IPV4_ENABLED
|
#if IPV4_ENABLED
|
||||||
struct sockaddr_in *addr4 = (struct sockaddr_in *)&to_addr;
|
struct sockaddr_in *addr4 = (struct sockaddr_in *)&to_addr;
|
||||||
addr4->sin_family = AF_INET;
|
addr4->sin_family = AF_INET;
|
||||||
addr4->sin_port = htons(port);
|
addr4->sin_port = htons(port);
|
||||||
inet_aton("127.0.0.1", &addr4->sin_addr);
|
inet_aton("127.0.0.1", &addr4->sin_addr);
|
||||||
|
addr_len = sizeof(struct sockaddr_in);
|
||||||
#else
|
#else
|
||||||
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&to_addr;
|
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&to_addr;
|
||||||
addr6->sin6_family = AF_INET6;
|
addr6->sin6_family = AF_INET6;
|
||||||
addr6->sin6_port = htons(port);
|
addr6->sin6_port = htons(port);
|
||||||
inet6_aton("::1", &addr6->sin6_addr);
|
inet6_aton("::1", &addr6->sin6_addr);
|
||||||
|
addr_len = sizeof(struct sockaddr_in6);
|
||||||
#endif
|
#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) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
|
Reference in New Issue
Block a user