检测无连接的Unix域套接字是否没有接收器

时间:2015-05-06 17:49:20

标签: ipc unix-socket

我正在设计一个多进程服务器,它需要能够将连接的套接字发送给兄弟进程。我打算用unix域套接字执行此操作,但我不想保持打开O(n ^ 2)连接以使它们彼此连接,所以我在考虑使用无连接(即SOCK_DGRAM)UDS(避免每次连接和断开连接的开销。

我关注的是,如果其中一个进程崩溃,并且不再在其UDS套接字上接收消息,会发生什么?

发件人阻止,只是缓冲内核中的数据,给出一个关于问题的明确错误(没有人接收),还有其他什么?

基本上,我认为问题归结为“如何判断是否存在绑定给定UDS的(正在运行)进程?'

1 个答案:

答案 0 :(得分:3)

如果您尝试sendto不存在的AF_UNIX SOCK_DGRAM套接字,则sendto(2)调用将因ENOENT而失败。因此,只要您检查sendto调用的错误返回值并正确处理它们,一切都应该没问题。

如果您发送到套接字的竞争条件正如它打开的进程崩溃(并关闭它),这将导致丢失消息,因此您也需要了解它。