ESPHome 2026.3.0-dev
Loading...
Searching...
No Matches
lwip_sockets_impl.h
Go to the documentation of this file.
1#pragma once
3
4#ifdef USE_SOCKET_IMPL_LWIP_SOCKETS
5
6#include <memory>
7#include <span>
8
10#include "headers.h"
11
12namespace esphome::socket {
13
15 public:
16 LwIPSocketImpl(int fd, bool monitor_loop = false);
18 LwIPSocketImpl(const LwIPSocketImpl &) = delete;
20
21 int connect(const struct sockaddr *addr, socklen_t addrlen) { return lwip_connect(this->fd_, addr, addrlen); }
22 std::unique_ptr<LwIPSocketImpl> accept(struct sockaddr *addr, socklen_t *addrlen) {
23 int fd = lwip_accept(this->fd_, addr, addrlen);
24 if (fd == -1)
25 return {};
26 return make_unique<LwIPSocketImpl>(fd, false);
27 }
28 std::unique_ptr<LwIPSocketImpl> accept_loop_monitored(struct sockaddr *addr, socklen_t *addrlen) {
29 int fd = lwip_accept(this->fd_, addr, addrlen);
30 if (fd == -1)
31 return {};
32 return make_unique<LwIPSocketImpl>(fd, true);
33 }
34
35 int bind(const struct sockaddr *addr, socklen_t addrlen) { return lwip_bind(this->fd_, addr, addrlen); }
36 int close();
37 int shutdown(int how) { return lwip_shutdown(this->fd_, how); }
38
39 int getpeername(struct sockaddr *addr, socklen_t *addrlen) { return lwip_getpeername(this->fd_, addr, addrlen); }
40 int getsockname(struct sockaddr *addr, socklen_t *addrlen) { return lwip_getsockname(this->fd_, addr, addrlen); }
41
43 size_t getpeername_to(std::span<char, SOCKADDR_STR_LEN> buf);
45 size_t getsockname_to(std::span<char, SOCKADDR_STR_LEN> buf);
46
47 int getsockopt(int level, int optname, void *optval, socklen_t *optlen) {
48 return lwip_getsockopt(this->fd_, level, optname, optval, optlen);
49 }
50 int setsockopt(int level, int optname, const void *optval, socklen_t optlen) {
51 return lwip_setsockopt(this->fd_, level, optname, optval, optlen);
52 }
53 int listen(int backlog) { return lwip_listen(this->fd_, backlog); }
54 ssize_t read(void *buf, size_t len) { return lwip_read(this->fd_, buf, len); }
55 ssize_t recvfrom(void *buf, size_t len, sockaddr *addr, socklen_t *addr_len) {
56 return lwip_recvfrom(this->fd_, buf, len, 0, addr, addr_len);
57 }
58 ssize_t readv(const struct iovec *iov, int iovcnt) { return lwip_readv(this->fd_, iov, iovcnt); }
59 ssize_t write(const void *buf, size_t len) { return lwip_write(this->fd_, buf, len); }
60 ssize_t send(const void *buf, size_t len, int flags) { return lwip_send(this->fd_, buf, len, flags); }
61 ssize_t writev(const struct iovec *iov, int iovcnt) { return lwip_writev(this->fd_, iov, iovcnt); }
62 ssize_t sendto(const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) {
63 return lwip_sendto(this->fd_, buf, len, flags, to, tolen);
64 }
65 int setblocking(bool blocking);
66 int loop() { return 0; }
67
68 bool ready() const;
69
70 int get_fd() const { return this->fd_; }
71
72 protected:
73 int fd_{-1};
74 bool closed_{false};
75 bool loop_monitored_{false};
76};
77
78} // namespace esphome::socket
79
80#endif // USE_SOCKET_IMPL_LWIP_SOCKETS
int getsockname(struct sockaddr *addr, socklen_t *addrlen)
size_t getsockname_to(std::span< char, SOCKADDR_STR_LEN > buf)
Format local address into a fixed-size buffer (no heap allocation)
int setsockopt(int level, int optname, const void *optval, socklen_t optlen)
int connect(const struct sockaddr *addr, socklen_t addrlen)
ssize_t sendto(const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
ssize_t recvfrom(void *buf, size_t len, sockaddr *addr, socklen_t *addr_len)
ssize_t send(const void *buf, size_t len, int flags)
int getsockopt(int level, int optname, void *optval, socklen_t *optlen)
ssize_t read(void *buf, size_t len)
ssize_t writev(const struct iovec *iov, int iovcnt)
int bind(const struct sockaddr *addr, socklen_t addrlen)
LwIPSocketImpl(const LwIPSocketImpl &)=delete
std::unique_ptr< LwIPSocketImpl > accept_loop_monitored(struct sockaddr *addr, socklen_t *addrlen)
std::unique_ptr< LwIPSocketImpl > accept(struct sockaddr *addr, socklen_t *addrlen)
LwIPSocketImpl(int fd, bool monitor_loop=false)
int getpeername(struct sockaddr *addr, socklen_t *addrlen)
ssize_t readv(const struct iovec *iov, int iovcnt)
size_t getpeername_to(std::span< char, SOCKADDR_STR_LEN > buf)
Format peer address into a fixed-size buffer (no heap allocation)
LwIPSocketImpl & operator=(const LwIPSocketImpl &)=delete
ssize_t write(const void *buf, size_t len)
uint16_t flags
uint16_t addr_len
uint32_t socklen_t
Definition headers.h:97
__int64 ssize_t
Definition httplib.h:178
std::string size_t len
Definition helpers.h:817