Again, like in the internet domain, the connection needs to be established in both directions if bi-direction communication is required:
server: % Make a named socket and read two terms from it [eclipse 10]: socket(unix, datagram, s), bind(s, '/tmp/sock'). yes. [eclipse 11]: read(s, X), read(s, Y). process1: % Connect a socket to the server and write one term [eclipse 32]: socket(unix, datagram, s), connect(s, '/tmp/sock'). yes. [eclipse 33]: printf(s, "%w. %b", message(process1)). process2: % Connect a named socket to the server and write another term [eclipse 15]: socket(unix, datagram, s), connect(s, '/tmp/sock'), bind(s, '/tmp/socka'). yes. [eclipse 16]: printf(s, "%w. %b", message(process2)). yes. % And now disconnect the output socket from the server [eclipse 17]: connect(s, 0). yes. server: % Now the server can read the two terms X = message(process1) Y = message(process2) yes. % and it writes one term to the second process on the same socket [eclipse 12]: connect(s, '/tmp/socka'), printf(s, "%w. %b", message(server)). process2: % [eclipse 18]: read(s, Msg). Msg = message(server) yes.