Is it better to use POSIX message queues or Unix domain sockets for local IPC communication?
I have worked with Unix sockets between machines (not domain) and I reme
UNIX domain sockets do not have to "linger" in a TIME_WAIT
-like status, since that wait time is used in case there are stray packets from the connection still wandering around the Internet. The concern doesn't apply locally.
UNIX domain sockets can be either SOCK_STREAM
(like TCP) or SOCK_DGRAM
(like UDP), with the added guarantee that UNIX domain datagram sockets are reliable and don't re-order datagrams.
You will still need some kind of ACK (you do even with TCP) if you want to be certain that your other application has read the message you sent; after all, even if the send()
succeeded it may have crashed before it had a chance to process the message. (This applies to message queues too - to be totally sure that a message won't be lost, the recieving application must write the request to a journal, flush that to disk and then send back an acknowledgement).
I agree that the choice is essentially a matter of programming familiarity.