C 正在检查服务器进程是否正在侦听域套接字

C 正在检查服务器进程是否正在侦听域套接字,c,linux,sockets,unix,client-server,C,Linux,Sockets,Unix,Client Server,我正在编写客户机-服务器程序,它使用unix域套接字在双方之间进行通信。 要求是: 服务器在给定地址上打开一个抽象套接字,然后监听该套接字。通过某些触发器,服务器可以停止侦听该消息 客户端必须监视服务器是否正在侦听给定的地址路径 若服务器正在套接字上侦听,则向服务器发送一个注册请求 如果服务器关闭套接字,则执行一些清理操作 要检查服务器是否正在侦听,我的解决方案是: 定期创建套接字并连接到服务器地址路径,如果成功,则表示服务器正在侦听,反之亦然 但是,如果检查间隔太短,解决方案似乎会消耗cp

我正在编写客户机-服务器程序,它使用unix域套接字在双方之间进行通信。 要求是:

  • 服务器在给定地址上打开一个抽象套接字,然后监听该套接字。通过某些触发器,服务器可以停止侦听该消息
  • 客户端必须监视服务器是否正在侦听给定的地址路径

    • 若服务器正在套接字上侦听,则向服务器发送一个注册请求
    • 如果服务器关闭套接字,则执行一些清理操作
  • 要检查服务器是否正在侦听,我的解决方案是:

    定期创建套接字连接到服务器地址路径,如果成功,则表示服务器正在侦听,反之亦然

    但是,如果检查间隔太短,解决方案似乎会消耗cpu

    那么我的问题是:我们是否有任何方法,比如向系统注册一些回调,并在某个进程开始/停止侦听给定地址时获得通知?或者其他更好的建议


    非常感谢,

    您使用的时间间隔是多少?您描述的检查(通常)只需要一小段时间,如果延迟适当,不会导致大量CPU占用?要求是什么(检测服务器的启动/关闭)?间隔取决于服务器的启动/关闭速度。在我的例子中,它需要5毫秒,我可以看到,在空闲状态下,客户端不断检查服务器状态,然后它总是保持在任务管理器的顶部。有时是1%的CPU时间。您总是可以增加客户端延迟,并减少CPU。对于检测到服务器停机的情况,您可以保持连接打开,并进行读取。当服务器关闭连接时,它将失败,没有CPU负载。我已经尝试过间隔为1秒的case,但是case服务器的升降速度非常快,它将无法看到更改。我可以提供一些解决方法来解决这个问题,但我仍然希望有一个更好的方法来解决这个问题。如果您可以保持客户端连接打开,并等待读取失败,那么无论何时启动,您都可以立即检测到服务器正在关闭。