【发布时间】:2015-05-28 01:17:37
【问题描述】:
我有一个使用 pthreads 的小 Unix 守护进程。一个线程循环运行,使用recvmsg读取网络数据包。当守护进程收到信号时,会设置一个标志,告诉所有线程跳出它们的循环并退出。但是,在下一个数据包到达并且recvmsg 返回之前,“监听”线程永远不会检查标志,这可能需要一些时间。
使用pthread_kill 将SIGINT 传递给“监听”线程会使其脱离recvmsg,但它也会调用信号处理程序,该处理程序通过在控制台上按Ctrl+C 来处理发送的中断。这是不想要的。强制recvmsg 提前返回的另一种方法是关闭它正在侦听的套接字,但我认为必须有更好的方法。你知道它是什么吗?
这个守护进程只在 Linux 上使用,如果它有所作为的话。
【问题讨论】:
-
只是一个想法:你不能发送一个“假”数据包来强制
recvmsg醒来吗?