mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 16:51:52 +00:00
[udp] Avoid heap allocations when joining multicast groups (#12685)
This commit is contained in:
@@ -65,11 +65,14 @@ void UDPComponent::setup() {
|
||||
server.sin_port = htons(this->listen_port_);
|
||||
|
||||
if (this->listen_address_.has_value()) {
|
||||
// Only 16 bytes needed for IPv4, but use standard size for consistency
|
||||
char addr_buf[network::IP_ADDRESS_BUFFER_SIZE];
|
||||
this->listen_address_.value().str_to(addr_buf);
|
||||
struct ip_mreq imreq = {};
|
||||
imreq.imr_interface.s_addr = ESPHOME_INADDR_ANY;
|
||||
inet_aton(this->listen_address_.value().str().c_str(), &imreq.imr_multiaddr);
|
||||
inet_aton(addr_buf, &imreq.imr_multiaddr);
|
||||
server.sin_addr.s_addr = imreq.imr_multiaddr.s_addr;
|
||||
ESP_LOGD(TAG, "Join multicast %s", this->listen_address_.value().str().c_str());
|
||||
ESP_LOGD(TAG, "Join multicast %s", addr_buf);
|
||||
err = this->listen_socket_->setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, &imreq, sizeof(imreq));
|
||||
if (err < 0) {
|
||||
ESP_LOGE(TAG, "Failed to set IP_ADD_MEMBERSHIP. Error %d", errno);
|
||||
|
||||
Reference in New Issue
Block a user