diff --git a/esphome/components/socket/bsd_sockets_impl.cpp b/esphome/components/socket/bsd_sockets_impl.cpp index f07f5c8f81..1b3916fcab 100644 --- a/esphome/components/socket/bsd_sockets_impl.cpp +++ b/esphome/components/socket/bsd_sockets_impl.cpp @@ -46,6 +46,7 @@ class BSDSocketImpl : public Socket { close(); // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall) } } + int connect(const struct sockaddr *addr, socklen_t addrlen) override { return ::connect(fd_, addr, addrlen); } std::unique_ptr accept(struct sockaddr *addr, socklen_t *addrlen) override { int fd = ::accept(fd_, addr, addrlen); if (fd == -1) diff --git a/esphome/components/socket/lwip_sockets_impl.cpp b/esphome/components/socket/lwip_sockets_impl.cpp index eaf6ac2c6f..c41e42fc83 100644 --- a/esphome/components/socket/lwip_sockets_impl.cpp +++ b/esphome/components/socket/lwip_sockets_impl.cpp @@ -39,6 +39,7 @@ class LwIPSocketImpl : public Socket { close(); // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall) } } + int connect(const struct sockaddr *addr, socklen_t addrlen) override { return lwip_connect(fd_, addr, addrlen); } std::unique_ptr accept(struct sockaddr *addr, socklen_t *addrlen) override { int fd = lwip_accept(fd_, addr, addrlen); if (fd == -1) diff --git a/esphome/components/socket/socket.h b/esphome/components/socket/socket.h index cefdb51e0d..917f3c4c7f 100644 --- a/esphome/components/socket/socket.h +++ b/esphome/components/socket/socket.h @@ -21,7 +21,9 @@ class Socket { virtual int close() = 0; // not supported yet: // virtual int connect(const std::string &address) = 0; - // virtual int connect(const struct sockaddr *addr, socklen_t addrlen) = 0; +#if defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS) + virtual int connect(const struct sockaddr *addr, socklen_t addrlen) = 0; +#endif virtual int shutdown(int how) = 0; virtual int getpeername(struct sockaddr *addr, socklen_t *addrlen) = 0;