【发布时间】:2013-11-22 03:02:01
【问题描述】:
我正在编写一个服务器应用程序(我的第一个),但遇到了一个问题。我想确保在关闭时调用每个析构函数(保存数据,..),所以我正在处理进程信号。但是,当我的线程进入阻塞接受调用时,它显然不会退出,直到连接被接受。
我应该如何实现这个?如果我可以简单地指示是否通过变量输入阻塞接受,我会更喜欢,但这可能是不可能的(或者就应用程序的运行方式而言是可取的)。使用 select 的最佳方式是(创建一个临时文件,当信号被捕获时将被写入)?
【问题讨论】:
-
这个阻塞调用没有超时吗?
-
有点不清楚你在问什么。如果在阻塞
accept()调用期间出现信号,accept()调用将返回EINTR,因此您的程序应该能够退出。我不太确定是否要阻止accept()会有所帮助;您是否打算在循环中反复轮询它?这会占用大量 CPU 时间;select()绝对比忙着等待更可取。你能展示你正在尝试做什么的sn-p吗?讨论一个具体的例子会容易一些。 -
它实际上比这更复杂一些,我试图用我的问题让它更简单,但我现在看到我很不清楚。无论哪种方式,在临时 fd 上选择可能是我问题的正确答案,我只是不确定是否有更好的方法。谢谢你的回答。
-
Wake up thread blocked on accept() call 和/或 Non-blocking socket accept without spinlock in C 的可能重复项。给出的答案是 POSIXly 可实现的。