【问题标题】:UNIX Socket: Can a client ever read data meant for another client?UNIX Socket:一个客户端可以读取到另一个客户端的数据吗?
【发布时间】:2012-03-06 21:50:27
【问题描述】:

考虑一个服务器进程被多个客户端进程使用 UNIX 套接字作为 IPC 机制联系。

每个客户端代码都在无限循环中运行,试图从/向套接字读取数据。

我的问题:客户端如何知道它没有读取打算由其他进程读取的数据?服务器进程正在将数据写入单个套接字,对吗?

对于 TCP/IP,这个问题没有意义 - 一个套接字意味着一个元组 <remote host, remote port, local host, local port, protocol>,因此在试图访问服务器的不同机器上运行的进程永远无法读取彼此的数据。

但是对于 UNIX 套接字,它只是一个文件,对吗?还是我错过了什么?

【问题讨论】:

  • 你能添加一些代码吗?
  • @tafoo85:这只是一个 UNIX 服务器进程被多个客户端进程联系的一般情况。由于 IPC 方案是映射到文件的 UNIX 域套接字,我的问题是客户端如何知道某些数据是否是给它的,因为服务器总是将数据写入同一个套接字?
  • 如果我可以参考一些代码,它通常有助于解释。就是这样。
  • '服务器进程正在将数据写入单个套接字,对吗?':错误。在每种情况下,它正在写入不同的接受套接字。

标签: sockets network-programming unix-socket


【解决方案1】:
  • 在服务器上,每个客户端都有自己的套接字。显然,您不会读取发送给其他客户端的数据。
  • UNIX 套接字不是文件,但它的许多功能都可以通过文件 API 调用来访问。

【讨论】:

  • +1。您能否分享一些链接,我可以在其中找到服务器如何解释 UNIX 套接字或任何有关内部细节的讨论。
  • 古老的 unix 格言是:“一切都是文件”。并非所有文件都是相同的(例如,您不能 seek() tty),但 open() read() write() 在大多数文件/索引节点上都实现了。 Listen() 和 bind() 是为套接字描述符实现的,但显然不是为磁盘文件实现的。
  • 我想我说了同样的话。它看起来像一个文件。但事实并非如此。
  • 抱歉造成混淆,评论不是针对@yi_H,而是针对OP。
猜你喜欢
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多