如何解决是否有任何可移植的或至少是供应商特定的方法来检测 Unix 套接字是否是孤立的?
当一个进程创建UDS并异常退出时,它会留下一个套接字文件。下次运行时,程序可能无法看到文件已经存在。
有没有办法检测套接字文件是否是孤立的?最好的方法应该是 POSIX,并且可以在任何 UNIX 品牌上使用,但也可以使用 Linux/FreeBSD/Solaris/任何特定的东西。
我不是在问如何
- make
/tmp
在重启时被清除。有时应用程序会在不重启的情况下崩溃。 - 使用任何 GUI 甚至命令行工具手动检查它。
- 在运行程序之前删除文件列表或在
unlink
之前添加bind
。
解决方法
好吧,看来我离答案只有一步之遥了。
- UDS 没有比
SO_REUSEADDR
更像的东西,我相信这是有充分理由的 - 有一种用锁文件保护套接字文件的方法,这是一种(相对)干净和理智的方法
使用 /tmp/socket.lock
来保护 /tmp/socket
,我们必须
- 用
O_RDONLY | O_CREAT
打开它 - 用
LOCK_EX | LOCK_NB
永远不要对守卫做任何事情。如果 flock 在下一次运行成功,则没有进程持有锁文件,也没有进程使用套接字。我们可以删除它。
当然,我们假设每个使用套接字的程序也使用该协议。
详细信息位于 Victor Gadov's github,由于 Internet 中链接的脆弱性,复制到此处。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。