中断接受()
是否有OS可移植的方式来中断阻塞accept
? 我有一个multithreadingdeamon /服务,当deamon / service获得关闭信号时,需要正常关闭所有侦听网络主机。 我看到有人说你应该使用非阻塞套接字或选择超时 – 但这些会不会降低性能,因为我的应用程序应尽可能快? 守护进程在主线程中运行,而每个侦听网络主机都在自己的线程中运行。 现在的问题是,如果侦听网络主机的套接字上没有网络流量,则accept
无限期等待。 如果我应该使用信号,那么有一个使用信号来中断accept
的例子吗?
这里的解决方案是在没有任何事情要求时不要调用accept
。 只需使用非阻塞select
或poll
等待直到有东西要接受,然后在那时accept
。 除非你创建一个非常小的超时,否则从非阻塞调用中唤醒并返回再次等待该套接字将不会有任何性能影响。