2016-05-03 16 views
1

Aus vielen Gründen möchte ich Unix-Domain-Sockets für IPC zwischen zwei Prozessen verwenden.Unix Domain Socket gleichzeitig lesen/schreiben an beiden Enden

Jeder Prozess reagiert auf asynchrone Ereignisse bestimmter Art von der Außenwelt, indem er in den Socket schreibt und dieses Ereignis dem zweiten Prozess mitteilt - und gleichzeitig muss jeder Prozess auch Daten aus dem anderen Socket lesen um ein paar Sachen zu machen. Im Wesentlichen würde es in diesem Modell einen Socket und zwei Threads pro Prozess geben: einen für mögliche blockierende Lesevorgänge und einen für die Schriften.

Ich würde gerne wissen, wenn es möglich ist, Unix-Domain-Sockets für das gleichzeitige Lesen und Schreiben von/zu jedem Prozess unabhängig zu verwenden, ohne explizite Sperren in dieser Sicherheit würde implizit durch diese Art von Sockets garantiert. Wenn ja, würde ich gerne wissen, wo diese Garantie offiziell gefordert wird.

+0

In Verbindung stehend: http://stackoverflow.com/q/9644251/694576 – alk

Antwort

4

Der einzige wesentliche Unterschied zwischen einer Buchse und einem AF_LOCALAF_INET Buchse ist, dass AF_LOCAL Buchsen lokalen den aktuelle Computer befindet. Einen AF_LOCAL Sockel zu erstellen und zu binden ist kein Unterschied, als einen AF_INET Sockel zu erstellen und ihn an localhost zu binden.

Der Pfad zum Binden von AF_LOCAL Sockets wird nur für den Anschluss an die Buchse verwendet, sonst nichts.

Wenn Sie also einen verbindungsorientierte AF_LOCAL Buchse (mit SOCK_STREAM oder SOCK_SEQPACKET) erstellen Sie dann jede Verbindung ist einzigartig und Sie können mehrere Prozesse durch das gleiche Zuhören Anschluss (passiv) AF_LOCAL Buchse.