Tenemos un error de larga data en nuestro código de producción. Esto es esencialmente un daemon basado en socket. Escucha un montón de descriptores de archivo usando select.Seleccione EBADF: ¿qué FD es malo?
Ocasionalmente (una vez al día más o menos), seleccionar volverá con EBADF.
He escrito un código para buscar el descriptor de archivo incorrecto, que pasa por encima de cada fd y las llamadas lo seleccionan. Estas llamadas nunca regresan a EBADF. También probé fstat. Ellos tampoco regresan nunca a EBADF.
También reescribí el daemon para usar la encuesta. Esto no ayudó.
¿Alguien tiene alguna otra idea? (Aparte de que cometí un error tonto, que es todo fácil de hacer con seleccionar).