c - 选择 EBADF : which FD is bad?

标签 c linux

我们的生产代码中存在一个长期存在的错误。这本质上是一个基于套接字的守护进程。它使用 select 监听一堆文件描述符。

偶尔(大约一天一次),select 将返回 EBADF。

我已经编写了代码来搜索错误的文件描述符,它循环遍历每个 fd 并在其上调用 select。这些调用从不返回 EBADF。我也试过 fstat。他们也从不返回 EBADF。

我还重写了守护进程以使用轮询。这没有帮助。

有人有其他想法吗? (除了我犯了一个愚蠢的错误,使用 select 很容易做到这一点)。

最佳答案

select 很可能是在关闭的文件描述符上调用的。 通常的来源是重用 fd_set 而不重新初始化它。 你在信号处理程序中有什么进展吗? (比如在 HUP 上重新打开日志文件?)

关于c - 选择 EBADF : which FD is bad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/883282/

相关文章:

c - 是什么让 C 标准库函数变得危险,还有什么替代方案?

c++ - abort() 的调用者在回溯中是未知的,任何调试它的建议

c - 如何判断每个随机数是否命中错误

c - tasklet执行ISR资源使用中使用Semaphore好不好

linux - 如何使用 bluez 库在蓝牙中测试 sco 数据包

linux - LIST_HEAD(clean_pages) 在 Linux 内核中不工作

linux - Makefile命令替换问题

c - 通过 pipe() 系统调用 : how to imitate pressing enter (during the input) in terminal? 向子进程传输数据

c - 返回指向局部变量的指针

linux - 聚合行和求和列