mirror of
https://github.com/esphome/esphome.git
synced 2026-02-28 18:04:19 -07:00
[udp] Register socket consumption for CONFIG_LWIP_MAX_SOCKETS
The UDP component creates up to 2 sockets (broadcast + listen) but did not register them with the socket consumption API. This could cause CONFIG_LWIP_MAX_SOCKETS to be set too low on ESP32 IDF. Closes https://github.com/esphome/esphome/issues/14031
This commit is contained in:
@@ -65,33 +65,47 @@ RELOCATED = {
|
||||
)
|
||||
}
|
||||
|
||||
CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend(
|
||||
{
|
||||
cv.GenerateID(): cv.declare_id(UDPComponent),
|
||||
cv.Optional(CONF_PORT, default=18511): cv.Any(
|
||||
cv.port,
|
||||
cv.Schema(
|
||||
|
||||
def _consume_udp_sockets(config: cv.ConfigType) -> cv.ConfigType:
|
||||
"""Register socket needs for UDP component."""
|
||||
from esphome.components import socket
|
||||
|
||||
# UDP uses up to 2 sockets: 1 broadcast + 1 listen
|
||||
# Whether each is used depends on code generation, so register worst case
|
||||
socket.consume_sockets(2, "udp")(config)
|
||||
return config
|
||||
|
||||
|
||||
CONFIG_SCHEMA = cv.All(
|
||||
cv.COMPONENT_SCHEMA.extend(
|
||||
{
|
||||
cv.GenerateID(): cv.declare_id(UDPComponent),
|
||||
cv.Optional(CONF_PORT, default=18511): cv.Any(
|
||||
cv.port,
|
||||
cv.Schema(
|
||||
{
|
||||
cv.Required(CONF_LISTEN_PORT): cv.port,
|
||||
cv.Required(CONF_BROADCAST_PORT): cv.port,
|
||||
}
|
||||
),
|
||||
),
|
||||
cv.Optional(
|
||||
CONF_LISTEN_ADDRESS, default="255.255.255.255"
|
||||
): cv.ipv4address_multi_broadcast,
|
||||
cv.Optional(CONF_ADDRESSES, default=["255.255.255.255"]): cv.ensure_list(
|
||||
cv.ipv4address,
|
||||
),
|
||||
cv.Optional(CONF_ON_RECEIVE): automation.validate_automation(
|
||||
{
|
||||
cv.Required(CONF_LISTEN_PORT): cv.port,
|
||||
cv.Required(CONF_BROADCAST_PORT): cv.port,
|
||||
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
||||
Trigger.template(trigger_args)
|
||||
),
|
||||
}
|
||||
),
|
||||
),
|
||||
cv.Optional(
|
||||
CONF_LISTEN_ADDRESS, default="255.255.255.255"
|
||||
): cv.ipv4address_multi_broadcast,
|
||||
cv.Optional(CONF_ADDRESSES, default=["255.255.255.255"]): cv.ensure_list(
|
||||
cv.ipv4address,
|
||||
),
|
||||
cv.Optional(CONF_ON_RECEIVE): automation.validate_automation(
|
||||
{
|
||||
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
||||
Trigger.template(trigger_args)
|
||||
),
|
||||
}
|
||||
),
|
||||
}
|
||||
).extend(RELOCATED)
|
||||
}
|
||||
).extend(RELOCATED),
|
||||
_consume_udp_sockets,
|
||||
)
|
||||
|
||||
|
||||
async def register_udp_client(var, config):
|
||||
|
||||
Reference in New Issue
Block a user