FIFO has following benefits:
- they are atomic for writing if data len is less than PIPE_BUF
- splice is almost garanted working with SPLICE_F_MOVE (no user space data copy kernel will move data between pipes)
- they are more easy to set up in comparison with sockets
But on the other hand it is unidirectional i.e. you most likely need 2 separate fifo:
- for writing data from client to server
- for writing data from server to client
Or use one fifo but reopen it as need i.e. get data on server - reopen fifo WR_ONLY on server, reopen fifo RD_ONLY on client, get data on client and do vice versa after reading data from server.
http://man7.org/linux/man-pages/man7/pipe.7.html