ESPHome  2024.3.1
socket.h
Go to the documentation of this file.
1 #pragma once
2 #include <memory>
3 #include <string>
4 
6 #include "headers.h"
7 
8 namespace esphome {
9 namespace socket {
10 
11 class Socket {
12  public:
13  Socket() = default;
14  virtual ~Socket();
15  Socket(const Socket &) = delete;
16  Socket &operator=(const Socket &) = delete;
17 
18  virtual std::unique_ptr<Socket> accept(struct sockaddr *addr, socklen_t *addrlen) = 0;
19  virtual int bind(const struct sockaddr *addr, socklen_t addrlen) = 0;
20  virtual int close() = 0;
21  // not supported yet:
22  // virtual int connect(const std::string &address) = 0;
23  // virtual int connect(const struct sockaddr *addr, socklen_t addrlen) = 0;
24  virtual int shutdown(int how) = 0;
25 
26  virtual int getpeername(struct sockaddr *addr, socklen_t *addrlen) = 0;
27  virtual std::string getpeername() = 0;
28  virtual int getsockname(struct sockaddr *addr, socklen_t *addrlen) = 0;
29  virtual std::string getsockname() = 0;
30  virtual int getsockopt(int level, int optname, void *optval, socklen_t *optlen) = 0;
31  virtual int setsockopt(int level, int optname, const void *optval, socklen_t optlen) = 0;
32  virtual int listen(int backlog) = 0;
33  virtual ssize_t read(void *buf, size_t len) = 0;
34 #ifdef USE_SOCKET_IMPL_BSD_SOCKETS
35  virtual ssize_t recvfrom(void *buf, size_t len, sockaddr *addr, socklen_t *addr_len) = 0;
36 #endif
37  virtual ssize_t readv(const struct iovec *iov, int iovcnt) = 0;
38  virtual ssize_t write(const void *buf, size_t len) = 0;
39  virtual ssize_t writev(const struct iovec *iov, int iovcnt) = 0;
40  virtual ssize_t sendto(const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) = 0;
41 
42  virtual int setblocking(bool blocking) = 0;
43  virtual int loop() { return 0; };
44 };
45 
47 std::unique_ptr<Socket> socket(int domain, int type, int protocol);
48 
50 std::unique_ptr<Socket> socket_ip(int type, int protocol);
51 
53 socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const std::string &ip_address, uint16_t port);
54 
56 socklen_t set_sockaddr_any(struct sockaddr *addr, socklen_t addrlen, uint16_t port);
57 
58 } // namespace socket
59 } // namespace esphome
virtual int setsockopt(int level, int optname, const void *optval, socklen_t optlen)=0
std::unique_ptr< Socket > socket_ip(int type, int protocol)
Create a socket in the newest available IP domain (IPv6 or IPv4) of the given type and protocol...
Definition: socket.cpp:12
virtual int getsockopt(int level, int optname, void *optval, socklen_t *optlen)=0
virtual ssize_t readv(const struct iovec *iov, int iovcnt)=0
virtual int bind(const struct sockaddr *addr, socklen_t addrlen)=0
socklen_t set_sockaddr_any(struct sockaddr *addr, socklen_t addrlen, uint16_t port)
Set a sockaddr to the any address and specified port for the IP version used by socket_ip().
Definition: socket.cpp:53
virtual std::string getpeername()=0
virtual std::unique_ptr< Socket > accept(struct sockaddr *addr, socklen_t *addrlen)=0
virtual ssize_t write(const void *buf, size_t len)=0
uint32_t socklen_t
Definition: headers.h:97
virtual int shutdown(int how)=0
virtual ssize_t writev(const struct iovec *iov, int iovcnt)=0
virtual std::string getsockname()=0
uint8_t type
virtual int listen(int backlog)=0
virtual ssize_t read(void *buf, size_t len)=0
Definition: headers.h:100
virtual int loop()
Definition: socket.h:43
const uint32_t flags
Definition: stm32flash.h:85
std::string size_t len
Definition: helpers.h:292
virtual int setblocking(bool blocking)=0
virtual int close()=0
This is a workaround until we can figure out a way to get the tflite-micro idf component code availab...
Definition: a01nyub.cpp:7
socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const std::string &ip_address, uint16_t port)
Set a sockaddr to the specified address and port for the IP version used by socket_ip().
Definition: socket.cpp:20
virtual ssize_t sendto(const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)=0
virtual ssize_t recvfrom(void *buf, size_t len, sockaddr *addr, socklen_t *addr_len)=0
Socket & operator=(const Socket &)=delete
std::unique_ptr< Socket > socket(int domain, int type, int protocol)
Create a socket of the given domain, type and protocol.