Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

Error 23 de curl: diagnostica el consumidor de salida antes de reintentar

El error 23 significa que curl no pudo escribir los datos recibidos en el destino local. Conserva stderr y el estado de cada etapa, identifica si consume un archivo, tubería, terminal o callback, repara ese escritor y verifica los bytes completos o un resumen fiable.

Diagrama original de cuatro consumidores de salida de curl: archivo, tubería, terminal y callback.
Ilustración original: el error 23 señala un escritor local fallido; identifica el consumidor antes de repararlo. Watch at Ease

El código 23 de curl es un fallo de escritura local, no un diagnóstico de la red. Conserva stderr y el estado de cada etapa, identifica el consumidor real, reproduce su contrato de escritura, repáralo y acepta el resultado solo tras verificar el recuento completo de bytes o un resumen fiable.

1. Conservar el primer fallo antes de reintentar

Reproduce la orden mínima sin ocultar stderr. Para un archivo, registra orden, ruta, código de curl y primer error; para una tubería, guarda PIPESTATUS inmediatamente y activa pipefail si el fallo de una etapa debe fallar todo el proceso.

No empieces añadiendo reintentos, descartando stderr ni cambiando TLS. El 23 apunta a una escritura local; un reintento no crea el directorio padre, libera espacio, reabre una tubería cerrada ni corrige un callback.

2. Identificar el consumidor que falló

Si -o nombra un archivo, revisa padre, permisos, bloques, inodos, cuota, montaje y espacio de nombres. Si stdout entra en una tubería, el siguiente proceso es el consumidor: distingue cierre intencionado, caída o rechazo. La terminal y el callback también son consumidores.

El callback debe informar todos los bytes procesados. Una devolución corta o fallida termina con CURLE_WRITE_ERROR, así que registra bytes solicitados, devueltos y el error de la aplicación.

3. Reproducir el destino local, no la petición remota

Prueba el consumidor con una entrada conocida e inocua. En pruebas locales con curl 8.5.0, /dev/full, un padre inexistente y una corriente completa hacia head -c 1 dieron curl 23; una corriente completa hacia sha256sum devolvió cero en ambas etapas.

El cierre temprano de head puede ser intencionado si solo se necesita un prefijo, pero debe registrarse como lectura parcial. Instaladores, archivos y cargas de datos requieren el contenido completo y no deben ocultar el fallo.

4. Reparar al responsable y definir la aceptación

Repara la rama demostrada: crea el padre con propietario correcto, libera o amplía el sistema de archivos, restaura el montaje, corrige el proceso posterior o el callback y repite la misma captura de evidencia.

La ausencia del mensaje no basta. Exige los estados previstos, el destino en el espacio correcto y, cuando exista, longitud, resumen del editor o firma; guarda stderr, estados, identidad del destino y validación final juntos.

Diagrama original de cinco pasos para capturar, identificar, reproducir, reparar y verificar curl 23.
Ilustración original del experimento: conserva estados, repara el escritor real y verifica bytes completos o un resumen fiable. Watch at Ease