Use Socket.create_socket_source() as it works for both TCP and UDP
sockets, but also does not use GDatagramBased interface, thus should
allow building on systems with older GLib versions.
Replace named constructor Device.from_cache() with static method
Device.new_from_cache() to catch errors when loading from cache and
return null in such case.
Calling Socket.create_source() will generate a C call to
g_socket_datagram_based_create_source(), and that returns null for TCP
sockets. Use a helper Socket.create_socket_source() method to workaround
this problem..
GLib.Socket implements GLib.DatagramBased, hence calling
Socket.create_source() results in a C call to
g_socket_datagram_based_create_source() insted of
g_socket_create_source() as one my expect. The former works only for
datagram based sockets (as implemented in gio/gsocket.c), hence
Socket.create_source() for TCP socket will always return null. To
workaround this, export g_socket_create_source() as
Socket.create_socket_source() method.
The change is expected to be a part of vala 0.34 release.
Due to gio-2.0 VAPI changes Socket.create_source() does not return a
SocketSource anymore, but a standard GLib.Source instead. Make sure that
we cast to SocketSource.
VAPI is autogenerated based on GObject introspection. The problem is
that for gir to work a library must be run on the host, what obviously
brakes if cross compilation is used. As a workaround use the hand
generated VAPI and completely dump autogeneration.
This enables debugging with gdb. Without -g flag, the generated C code
does not have file/line set, hence gdb has no way of telling the Vala
code line the C code corresponds to.