How to find the other point of a Unix domain socket on Mac OS X to write/read it

lsofmac-osxnetstatnetworkingsocket

I listed open file for a process (a daemon) on my box which runs Mac OS X 10.5 :

>lsof  -p 89
COMMAND PID     USER   FD   TYPE    DEVICE  SIZE/OFF     NODE NAME
...
xxxxx   89 xxxxxxxx    9u  unix 0x34f8990       0t0          ->0x34f8880

I 'd like to find a way to open this socket and write in it. (that's my obsession this time ..)

How to find the i-node/name of the underlying file in order to reach that socket? Is there a way to address programatically this adress 0x34f888 from a shell script? If not so, how to do programatically ?

As a comment, I've launched the netstat command and get this result:

> netstat -u
Active LOCAL (UNIX) domain sockets
Address  Type   Recv-Q Send-Q    Inode     Conn     Refs  Nextref Addr
...
 34f8990 stream      0      0        0  34f8880        0        0
...
 34f8880 stream      0      0        0  34f8990        0        0
...

I am not a network/socket guru. Hope this could give more information

PS: to be honest I've posted this question on StackOverflow first (sorry, I don't think to ServerFault a first sight for now) but no one seems to give answer . :/
same question on SO

Best Answer

It is possible for an AF_UNIX socket to be unbound to a filename, to be "unnamed", (or also "abstract" in which case is has a name but it has nothing to do with the filesystem) at least in Linux. It is unlikely that OS X is different. For details, see the man page for the socket function bind (or look in the dev docs).

Anyway, if OS X has the equivalent of the /proc filesystem you could possibly get a handle on the socket by going through the list of file descriptors of the target process. YMMV. Oops, it does not have a procfs. See this about Mac specific workarounds.