ESP-IDF 5.4.2: esp_ping 'send error=0' when deleting session
05:44 06 Aug 2025

I implemented a ping function for ESP-IDF 5.4.2, but sometimes I get the error: "E (185212) ping_sock: send error=0". I also tried using a SemaphoreHandle_t, but the result was worse than with this code. Do you have any ideas on how to solve this issue? I call the function to have the ping result: PingIp(192.168.1.23, 2, 100, 2000); Thanks in advance!

static E_COMMON_Status ping_result;


static void on_ping_success(esp_ping_handle_t hdl, void *args)
{
    ping_result = COMMON_STATUS_OK;
}


static void on_ping_timeout(esp_ping_handle_t hdl, void *args)
{

}

static void on_ping_end(esp_ping_handle_t hdl, void *args)
{
uint32_t transmitted;
uint32_t received;
uint32_t total_time_ms;

esp_ping_get_profile(hdl, ESP_PING_PROF_REQUEST, &transmitted, sizeof(transmitted));
esp_ping_get_profile(hdl, ESP_PING_PROF_REPLY, &received, sizeof(received));
esp_ping_get_profile(hdl, ESP_PING_PROF_DURATION, &total_time_ms, 

sizeof(total_time_ms));
}

E_COMMON_Status PingIp(char *ip_string, uint8_t pingCount, uint8_t pingInterval, uint8_t pingTimeout)
{
ping_result = COMMON_STATUS_KO;
MY_LOGI_MQTT(TAG, "PING:AVVIO DEL PING SU %s", ip_string);
ip_addr_t target_addr;
if (!inet_aton(ip_string, &target_addr))
{
    MY_LOGI_MQTT(TAG, "Conversione IP \"%s\" fallita", ip_string);
    return COMMON_STATUS_KO;
}

esp_ping_config_t config = ESP_PING_DEFAULT_CONFIG();
config.target_addr = target_addr;
config.count = pingCount;
config.interval_ms = pingInterval;
config.timeout_ms = pingTimeout;

esp_ping_callbacks_t cbs = {
    .on_ping_success = on_ping_success,
    .on_ping_timeout = on_ping_timeout,
    .on_ping_end = on_ping_end,
    .cb_args = NULL};
// ping_result = COMMON_STATUS_KO;

esp_ping_handle_t ping;
esp_err_t err = esp_ping_new_session(&config, &cbs, &ping);
if (err != ESP_OK)
{
    MY_LOGI_MQTT(TAG, "esp_ping_new_session errore: %d", err);
    return COMMON_STATUS_KO;
}

err = esp_ping_start(ping);
if (err != ESP_OK)
{
    MY_LOGI_MQTT(TAG, "esp_ping_start errore: %d", err);
    esp_ping_delete_session(ping);
    return COMMON_STATUS_KO;
}
vTaskDelay((config.timeout_ms * config.count + 500) / portTICK_PERIOD_MS);
esp_ping_stop(ping);
esp_ping_delete_session(ping);
if (ping_result == COMMON_STATUS_OK)
{
    MY_LOGI_MQTT(TAG, "STATO DEL PING: OK");
}
else
{
    MY_LOGI_MQTT(TAG, "STATO DEL PING: KO");
}
return ping_result;
}
esp32 ping esp-idf