退出应用程序时如何删除UNIX域套接字文件?

Phe*_*ix7 10 c sockets unix-socket

我有一个服务器应用程序,在特定的路径中创建一个UNIX域套接字,其名称和bind()s.

我只需要在应用程序代码中故意关闭/停止应用程序时删除套接字; 否则它需要开放.我该怎么做呢?

谢谢!

编辑:考虑我从终端内部启动并运行我的应用程序.

小智 15

你正在努力使它变得更加困难.放在unlink()右前方bind().这就是其他人如何做到的.(例如:BSD syslogd,基于unix-domain-socket的经典服务之一)

  • 您仍可以在退出时进行取消链接,以防止服务器未运行时过时的套接字出现在目录列表中。但这纯粹是化妆品。 (2认同)

gud*_*dok 6

如果您的应用程序有多个退出点,并且您不想修改每个退出点来调用清理例程,那么您可以使用“脏”方法。

当套接字刚刚创建时,向 注册清理例程atexit(3)unlink(2)当应用程序正常终止时,将调用例程(只是对 的调用)。但如果应用程序通过信号终止,则不会调用它。因此,如果您想在收到 SIGINT 和类似信号后进行清理,您还需要正确设置信号处理程序。