On 03/14/2011 02:36 PM, Bastien ROUCARIES wrote:
Or you could ask throught the socket, the process id of the receiving
process than send the handle.
Remember:
It is assumed that the two sides have coordinated and agreed to
transfer a file descriptor already, so that the sendfd is met with a
recvfd instead of an ordinary read.
No, you cannot unfortunately. Say that process 1 will do this:
send "getfd\n"
sendfd
then the following will work on Unix in process 2:
recv(socket, buf, 512) => return 6, buf = "getfd\n"
parse getfd
recvfd
If the recvfd info is sent on the normal channel (i.e. not out-of-band),
process 2 is going to fail like this:
recv(socket, buf, 512) => return 17, buf = "getfd\n0x12345678\0"
parse getfd
recvfd fails, or even worse it blocks (possibly forever)
even if recvfd doesn't block, parsing 0x12345678\0 fails
Paolo