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.