3

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

4

1 回答 1

5

accept这里的解决方案是在无事可做时不打电话。只需使用非阻塞selectpoll等到有东西可以接受,然后accept在那个时候。除非您创建一个非常小的超时,否则从非阻塞调用中唤醒并返回以再次等待该套接字不会对性能产生任何影响。

于 2013-06-29T21:22:17.990 回答