首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测unix域套接字删除吗?

问检测unix域套接字删除吗?
EN

Unix & Linux用户
提问于 2019-02-03 08:10:31
回答 1查看 2.3K关注 0票数 0

假设您有一个在启动时创建unix域套接字并开始监听它的应用程序。然后,应用程序的任何后续实例都连接到该套接字,将数据传递给第一个实例并退出(如果检测到另一个正在运行的实例,则只退出)。

据我所知,这种套接字表示为文件系统上的文件。让我们假设这个文件被随机的第三方程序或用户删除。现在,后续进程将无法检测到/与第一个实例通信。

第一个能检测到删除套接字文件,然后再重新创建它吗?

EN

回答 1

Unix & Linux用户

发布于 2019-02-03 09:35:57

无法重新创建已删除的Unix套接字文件。

实际上,您可以使用相同的路径创建另一个套接字文件(方法是再次将套接字文件描述符绑定到同一个地址),但是任何试图连接到它的客户端都将得到一个“拒绝连接”,而不是连接到最初绑定到它的套接字。

这是因为Unix套接字基本上绑定到inode,而不是路径。您可以轻松地检查netcat是否支持Unix套接字:

代码语言:javascript
复制
nc -lU /tmp/old_sock &
[1] 19241
ln -f /tmp/old_sock /tmp/new_sock; rm /tmp/old_sock
     # or mv /tmp/old_sock /tmp/new_sock 
echo yup | nc -U /tmp/new_sock
yup

程序所能做的就是关闭旧套接字,创建另一个套接字并将其绑定到同一个地址。为了得到删除文件的通知,您可以在Linux上使用inotify(7),在BSD上使用kqueue(2),或者只需在路径上周期性地执行stat(2) (与任何其他文件一样)。

请注意,Linux还有“抽象”Unix套接字--套接字绑定到一个字节序列(1),而不是任何文件系统对象,并且这些套接字不受任何文件类型访问权限的限制,不能被“移除”或移动到不同的地址。

1 --您可以称它为“字符串”,但请注意,它也可以包含NUL字节,这与文件系统路径不同。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/498395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档