Select one of the symbols to view example projects that use it.
 
Outline
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "sdkconfig.h"
#include "esp_log.h"
#include "ctrl_sock.h"
#define IPV4_ENABLED
#define IPV6_ENABLED
#define LOOPBACK_ENABLED
#define IPV4_ENABLED
#define IPV6_ENABLED
#define LOOPBACK_ENABLED
cs_create_ctrl_sock(int)
cs_free_ctrl_sock(int)
cs_send_to_ctrl_sock(int, int, void *, unsigned int)
cs_recv_from_ctrl_sock(int, void *, unsigned int)
Files
loading...
SourceVuESP-IDF Framework and ExamplesESP-IDFcomponents/esp_http_server/src/util/ctrl_sock.c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* * SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 *//* ... */ #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include "sdkconfig.h" #include "esp_log.h" #include "ctrl_sock.h"8 includes #if CONFIG_IDF_TARGET_LINUX #define IPV4_ENABLED 1 #define IPV6_ENABLED 1 #define LOOPBACK_ENABLED 1/* ... */ #else // CONFIG_IDF_TARGET_LINUX #define IPV4_ENABLED CONFIG_LWIP_IPV4 #define IPV6_ENABLED CONFIG_LWIP_IPV6 #define LOOPBACK_ENABLED CONFIG_LWIP_NETIF_LOOPBACK/* ... */ #endif // !CONFIG_IDF_TARGET_LINUX /* Control socket, because in some network stacks select can't be woken up any * other way *//* ... */ int cs_create_ctrl_sock(int port) { #if !LOOPBACK_ENABLED ESP_LOGE("esp_http_server", "Please enable LWIP_NETIF_LOOPBACK for %s API", __func__); return -1;/* ... */ #endif int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { return -1; }{...} int ret; struct sockaddr_storage addr = {}; #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);/* ... */ #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);/* ... */ #endif ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { close(fd); return -1; }{...} return fd; }{ ... } void cs_free_ctrl_sock(int fd) { close(fd); }{ ... } int cs_send_to_ctrl_sock(int send_fd, int port, void *data, unsigned int data_len) { int ret; struct sockaddr_storage to_addr = {}; #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);/* ... */ #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);/* ... */ #endif ret = sendto(send_fd, data, data_len, 0, (struct sockaddr *)&to_addr, sizeof(to_addr)); if (ret < 0) { return -1; }{...} return ret; }{ ... } int cs_recv_from_ctrl_sock(int fd, void *data, unsigned int data_len) { int ret; ret = recvfrom(fd, data, data_len, 0, NULL, NULL); if (ret < 0) { return -1; }{...} return ret; }{ ... }
Details