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