13#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS)
28 auto err = this->
broadcast_socket_->setsockopt(SOL_SOCKET, SO_REUSEADDR, &enable,
sizeof(
int));
33 err = this->
broadcast_socket_->setsockopt(SOL_SOCKET, SO_BROADCAST, &enable,
sizeof(
int));
49 ESP_LOGE(TAG,
"Unable to set nonblocking: errno %d", errno);
55 err = this->
listen_socket_->setsockopt(SOL_SOCKET, SO_REUSEADDR, &enable,
sizeof(enable));
63 server.
sin_addr.s_addr = ESPHOME_INADDR_ANY;
68 char addr_buf[network::IP_ADDRESS_BUFFER_SIZE];
70 struct ip_mreq imreq = {};
71 imreq.imr_interface.s_addr = ESPHOME_INADDR_ANY;
72 inet_aton(addr_buf, &imreq.imr_multiaddr);
73 server.
sin_addr.s_addr = imreq.imr_multiaddr.s_addr;
74 ESP_LOGD(TAG,
"Join multicast %s", addr_buf);
75 err = this->
listen_socket_->setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, &imreq,
sizeof(imreq));
77 ESP_LOGE(TAG,
"Failed to set IP_ADD_MEMBERSHIP. Error %d", errno);
86 ESP_LOGE(TAG,
"Socket unable to bind: errno %d", errno);
93#ifdef USE_SOCKET_IMPL_LWIP_TCP
95 for (
const auto &
address : this->addresses_) {
96 auto ipaddr = IPAddress();
socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const char *ip_address, uint16_t port)
Set a sockaddr to the specified address and port for the IP version used by socket_ip().