【问题标题】:Prevent getting stuck in a blocking call防止陷入阻塞呼叫
【发布时间】: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 可实现的。

标签: c posix


【解决方案1】:

您究竟想释放什么?您可以使用free(pointer to the structure) 来解除分配。

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多