选择EBADF:哪个FD不好?

选择EBADF:哪个FD不好?,第1张

概述我们的生产代码中长期存在错误.这实际上是一个基于套接字的守护进程.它使用select来监听一堆文件描述符. 偶尔(每天一次),选择将返回与EBADF. 我写了代码来搜索不好的描述符,循环遍历每个fd并调用select.这些呼叫永远不会返回EBADF.我也试过fstat.他们也永远不会返回EBADF. 我还重写了守护进程以使用民意测验.这没有帮助 有没有人有其他想法? (除了我做了一个愚蠢的错误,这 我们的生产代码中长期存在错误.这实际上是一个基于套接字的守护进程.它使用select来监听一堆文件描述符.

偶尔(每天一次),选择将返回与EBADF.

我写了代码来搜索不好的描述符,循环遍历每个fd并调用select.这些呼叫永远不会返回EBADF.我也试过fstat.他们也永远不会返回EBADF.

我还重写了守护进程以使用民意测验.这没有帮助

有没有人有其他想法? (除了我做了一个愚蠢的错误,这是很容易与选择).

解决方法 我同意詹姆斯使用poll(),您可以轻松地检查每个fd的回复.

struct pollfd fds[NUM_FDS];int ret,i;...ret = poll(fds,NUM_FDS,PolL_TIMEOUT);for (i = 0; i < NUM_FDS; i++)  if (fds[i].revents & PolLHUP || fds[i].revents & PolLNVAL)     ... do something ...@H_502_17@  

当然,你不会在现实世界中实现它,只是一个例子.我很久以前停止使用select(),poll()是一个更好的界面.你是正确的,它只是太容易拍摄自己的脚与select().

总结

以上是内存溢出为你收集整理的选择EBADF:哪个FD不好?全部内容,希望文章能够帮你解决选择EBADF:哪个FD不好?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1235711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存