I am trying to pass an established connection Unix Domain Socket file descriptor from process A to process B through another Unix Domain Socket connection, with no luck
although a tcp socket is passed with no problem.
Is there a reason to it or am I doing something wrong?
Both are passed through ancilary message
Socket file descriptor (just like a regular file descriptors) have absolutely no meaning outside the process that properly created them. When you send a
fd to other process, you are just sending a bunch of bytes - nothing more, nothing less.
The only way you can move a working
fd from one process to another is to
fork() a process containing the
fd to be passed.
If you want some process to connect to a particular Unix socket you should pass a unix socket file system entry name to that process. The receiving process can properly create a socket and make a connection afterwards.
I don't know why didn't you have problems with passing a tcp socket
fd. Perhaps if you post the relevant parts of your code the reason will be revealed.