feat: enhance UDPClient initialization with local port binding and add WebServerHandler for HTTP server management
This commit is contained in:
@@ -19,7 +19,7 @@ UDPClient::~UDPClient() {
|
||||
close();
|
||||
}
|
||||
|
||||
esp_err_t UDPClient::init() {
|
||||
esp_err_t UDPClient::init(uint16_t local_port) {
|
||||
if (initialized_) {
|
||||
ESP_LOGW(TAG, "Already initialized");
|
||||
return ESP_OK;
|
||||
@@ -31,6 +31,23 @@ esp_err_t UDPClient::init() {
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
// Bind to local port if specified
|
||||
if (local_port > 0) {
|
||||
struct sockaddr_in local_addr;
|
||||
memset(&local_addr, 0, sizeof(local_addr));
|
||||
local_addr.sin_family = AF_INET;
|
||||
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
local_addr.sin_port = htons(local_port);
|
||||
|
||||
if (bind(sock_fd_, (struct sockaddr*)&local_addr, sizeof(local_addr)) < 0) {
|
||||
ESP_LOGE(TAG, "Failed to bind to port %u: errno %d", local_port, errno);
|
||||
::close(sock_fd_);
|
||||
sock_fd_ = -1;
|
||||
return ESP_FAIL;
|
||||
}
|
||||
ESP_LOGI(TAG, "Bound to local port %u", local_port);
|
||||
}
|
||||
|
||||
// Set socket to non-blocking mode
|
||||
esp_err_t err = set_nonblocking();
|
||||
if (err != ESP_OK) {
|
||||
@@ -95,7 +112,7 @@ esp_err_t UDPClient::send_command(const std::string& command) {
|
||||
}
|
||||
|
||||
ssize_t sent = sendto(sock_fd_, command.c_str(), command.length(), 0,
|
||||
(struct sockaddr*)&remote_addr_, sizeof(remote_addr_));
|
||||
(struct sockaddr*)&remote_addr_, sizeof(remote_addr_));
|
||||
|
||||
if (sent < 0) {
|
||||
ESP_LOGE(TAG, "Failed to send command '%s': errno %d", command.c_str(), errno);
|
||||
@@ -144,7 +161,7 @@ esp_err_t UDPClient::receive_response(std::string& response, int timeout_ms) {
|
||||
socklen_t from_len = sizeof(from_addr);
|
||||
|
||||
ssize_t received = recvfrom(sock_fd_, buffer, sizeof(buffer) - 1, 0,
|
||||
(struct sockaddr*)&from_addr, &from_len);
|
||||
(struct sockaddr*)&from_addr, &from_len);
|
||||
|
||||
if (received < 0) {
|
||||
ESP_LOGE(TAG, "recvfrom() failed: errno %d", errno);
|
||||
|
||||
Reference in New Issue
Block a user