mirror of
https://github.com/esphome/esphome.git
synced 2026-02-18 15:35:59 -07: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_);
|
server.sin_port = htons(this->listen_port_);
|
||||||
|
|
||||||
if (this->listen_address_.has_value()) {
|
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 = {};
|
struct ip_mreq imreq = {};
|
||||||
imreq.imr_interface.s_addr = ESPHOME_INADDR_ANY;
|
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;
|
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));
|
err = this->listen_socket_->setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, &imreq, sizeof(imreq));
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
ESP_LOGE(TAG, "Failed to set IP_ADD_MEMBERSHIP. Error %d", errno);
|
ESP_LOGE(TAG, "Failed to set IP_ADD_MEMBERSHIP. Error %d", errno);
|
||||||
|
|||||||
Reference in New Issue
Block a user