Q:

What does the declarations {sa_family=AF_UNIX} and [110->2] mean in accept4?

I did an strace in my android and I got the following line
accept4(8<UNIX:[246]>, {sa_family=AF_UNIX}, [110->2], 0) = 9<UNIX:[2512219]>
I don't understand what {sa_family=AF_UNIX} does (it should be a sockaddr pointer but where does it points to in terms of path and memory address?) and I want to know what the 110 and the 2 means and why 110 is pointing to 2 and what exactly is returned from this operation.
(I'm really curious about the peer of a socket created like this because I can't find the inode 2512219 in any of the proc/PID/fd files so I wonder if the process which has read/write the socket is dead by now and if I can get his name.) Thanks!

A:

From man accept4:

int accept4(int sockfd, struct sockaddr *addr,
                     socklen_t *addrlen, int flags);

accept4(8<UNIX:[246]>, {sa_family=AF_UNIX}, [110->2], 0) = 9<UNIX:[2512219]>

8 is sockfd value. From man: the listening socket, sockfd
246 is the inode number of 8 file descriptor
The struct member .sa_family in the structure struct sockaddr stored in memory pointed to by the pointer addr has the value of AF_UNIX
From man: [addr] It is filled in with the address of the peer socket, as known to the  communications  layer.
110 input value addrlen (the socklen_t integer stored in the memory pointed to by addrlen pointer). From man: the caller  must  initialize  it [addrlen] to contain the size (in bytes) of the structure pointed to by addr;
2 value of addrlen after the function returned. From man: will contain the actual size of the peer address.
0 flags flags. From man: If  flags  is 0, then accept4() is the same as accept(). 
9 returned file descriptor. From man: a nonnegative integer that  is  a file descriptor for the accepted socket
2512219 inode number of 9th file descriptor

