中断接受()

时间:2013-06-29 21:15:43

标签: c++ c sockets networking winsock

是否有操作系统可移植的方式来中断阻止accept?我有一个多线程守护进程/服务,当deamon / service获得关闭信号时,需要正常关闭所有侦听网络主机。我看到有人说你应该使用非阻塞套接字或选择超时 - 但这些会不会降低性能,因为我的应用程序应该尽可能快?守护进程在主线程中运行,而每个侦听网络主机都在自己的线程中运行。现在的问题是,如果侦听网络主机的套接字上没有网络流量,accept将无限期地等待。如果我应该使用信号,那么是否有一个使用信号来中断accept

的示例

1 个答案:

答案 0 :(得分:5)

这里的解决方案是在没有任何事情要求时不要调用accept。只需使用非阻止selectpoll等待有接受的内容,然后再accept。除非你创建一个非常小的超时,否则从非阻塞调用中唤醒并返回再次等待该套接字不会有任何性能影响。