2012-02-15 56 views
0

考慮使用UNIX套接字作爲IPC機制的多個客戶端進程聯繫的服務器進程。UNIX套接字:客戶端是否可以讀取適用於其他客戶端的數據?

每個客戶端代碼都在無限循環中運行,試圖從/向套接字讀寫數據。

我的問題:客戶如何知道它不是正在讀取某些其他進程讀取的數據?服務器進程正在將數據寫入單個套接字,對嗎?

對於TCP/IP這個問題沒有任何意義 - 套接字將意味着一個元組<remote host, remote port, local host, local port, protocol>,因此嘗試訪問服務器的不同計算機上運行的進程永遠不會讀取彼此的數據。

但是對於UNIX套接字它只是一個文件嗎?或者我錯過了什麼?

+0

你可以添加一些代碼嗎? – tafoo85 2012-02-15 14:43:42

+0

@ tafoo85:這只是多個客戶端進程聯繫的UNIX服務器進程的一般情況。由於IPC方案是映射到文件的UNIX域套接字,我的問題是客戶端如何知道某些數據是否適合它,因爲服務器始終將數據寫入相同的套接字? – Fanatic23 2012-02-15 14:52:26

+0

如果我可以參考一些代碼,它通常有助於解釋。就這樣。 – tafoo85 2012-02-16 18:03:36

回答

1
  • 在服務器上,每個客戶端都有自己的套接字。顯然你不會讀取發送到不同客戶端的數據。
  • 一個UNIX套接字是而不是一個文件,但是它的很多功能都可以通過文件API調用來訪問。
+0

+1。你可以請分享一些鏈接,我可以找到服務器如何解釋UNIX套接字或任何討論關於內部的細節。 – Fanatic23 2012-02-15 15:27:37

+0

舊的unix adagium是:「一切都是文件」。並不是所有的文件都是相同的(例如,你不能找到一個tty),但是在大多數文件/ inode中實現了open()read()write()。 Listen()和bind()是爲套接字描述符實現的,但顯然不適用於磁盤文件。 – wildplasser 2012-02-15 15:38:33

+0

我想我說過同樣的話。它*看起來像一個文件。但事實並非如此。 – 2012-02-15 15:40:59

相關問題