if you use D-Bus on non-Linux Unix, please try new DBusSocket code
Simon McVittie
simon.mcvittie at collabora.co.uk
Tue Mar 31 05:35:40 PDT 2015
On <https://bugs.freedesktop.org/show_bug.cgi?id=89444> we've been
working on fixing the distinction between file descriptors and sockets,
which are the same thing on Unix, but unfortunately not on Windows
(where a SOCKET is basically a uintptr_t, if done correctly).
The solution we're trying is to introduce an internal DBusSocket struct
containing an int (on Unix) or a SOCKET (on Windows), to force APIs to
distinguish between the native thing and the abstraction.
If you use D-Bus on non-Linux Unix platforms (*BSD, Solaris, etc.) it's
possible that this will cause compilation failures, if I missed code
paths that are not compiled on Linux. So, please try compiling, and
preferably testing, this branch on your favourite Unix platform:
git clone -b dbussocket git://people.freedesktop.org/~smcv/dbus
web: http://cgit.freedesktop.org/~smcv/dbus/log/?h=dbussocket
and report any problems on #89444, ideally with patches. The fix for any
compilation errors will probably be something quite simple, like
replacing "getsomesocketthing (s)" with "getsomesocketthing (s.fd)".
The intention is:
* non-Unix-specific code consistently uses DBusSocket (if the thing
is definitely a socket) or DBusPollable (if it's an arbitrary
pollable thing, i.e. a socket on Windows but any fd on Unix),
and does not assume that either of those is an integer
* Unix-specific socket handling (dbus-sysdeps-*unix.c etc.) passes s.fd,
which is an int, to platform APIs
* Unix-specific pollable handling may rely on the fact that DBusPollable
is really an int
* for the moment, public APIs are still in terms of int, although
we should probably add dbus_watch_get_windows_socket() eventually
--
Simon McVittie
Collabora Ltd. <http://www.collabora.com/>
More information about the dbus
mailing list