clients not using X abstract socket (Linux)?

Eirik Byrkjeflot Anonsen eirik at opera.com
Thu Sep 11 05:44:37 PDT 2008


Julien Cristau <jcristau at debian.org> writes:

> On Wed, Sep 10, 2008 at 11:28:59 -0500, Xavier Toth wrote:
>
>> I noticed that the socket file /tmp/.X11-unix/X0 is being created on
>> my Fedora 9 box despite the fact that the X server is creating an
>> abstract socket which I would have thought was the preferred method of
>> connecting to the server. I wrote a little test to connect to the
>> abstract socket but it fails with 'Connection refused'. netstat makes
>> it look like no clients are connected to the abstract socket. Any idea
>> what's happening here and why my test can't connect?
>> 
> <snip>
>
>> static int _open_unix(const char *file)
>> {
>>     int fd;
>>     struct sockaddr_un addr = { AF_UNIX };
>> 
>>     memset(&addr, 0, sizeof(addr));
>>     addr.sun_family = AF_UNIX;
>> 
>>     fd = socket(AF_UNIX, SOCK_STREAM, 0);
>>     if(fd == -1)
>>         return -1;
>> 
>>     /* try the abstract socket first */
>>     strcpy(addr.sun_path + 1, file);
>>     if(connect(fd, (struct sockaddr *) &addr, sizeof(addr)) != -1) {
>>         return fd;
>>     }
> The size passed to connect() should be the same as that passed to bind()
> by the server, which would be 'strlen(file) + 1 + offsetof(struct
> sockaddr_un, sun_path)', and not sizeof(addr), for some reason.  See
> TRANS(SocketUNIXCreateListener) in Xtranssock.c.

Could that be related to this quote from "man unix": "Note that names
in the abstract namespace are not zero-terminated."

eirik



More information about the xorg mailing list