Networking

#include <multinetwork.h>

Summary

Variables

net_handle_t
__BEGIN_DECLS typedef uint64_t
The corresponding C type for android.net.Network::getNetworkHandle() return values.

Functions

android_getaddrinfofornetwork(net_handle_t network, const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)
int
Perform hostname resolution via the DNS servers associated with |network|.
android_setprocnetwork(net_handle_t network)
int
Binds the current process to |network|.
android_setsocknetwork(net_handle_t network, int fd)
int
All functions below that return an int return 0 on success or -1 on failure with an appropriate errno value set.

Variables

net_handle_t

__BEGIN_DECLS typedef uint64_t net_handle_t

The corresponding C type for android.net.Network::getNetworkHandle() return values.

The Java signed long value can be safely cast to a net_handle_t:

[C] ((net_handle_t) java_long_network_handle) [C++] static_cast(java_long_network_handle)

as appropriate.

Functions

android_getaddrinfofornetwork

int android_getaddrinfofornetwork(
  net_handle_t network,
  const char *node,
  const char *service,
  const struct addrinfo *hints,
  struct addrinfo **res
)

Perform hostname resolution via the DNS servers associated with |network|.

All arguments (apart from |network|) are used identically as those passed to getaddrinfo(3). Return and error values are identical to those of getaddrinfo(3), and in particular gai_strerror(3) can be used as expected. Similar to getaddrinfo(3):

  • |hints| may be NULL (in which case man page documented defaults apply)
  • either |node| or |service| may be NULL, but not both
  • |res| must not be NULL

This is the equivalent of: android.net.Network::getAllByName())

android_setprocnetwork

int android_setprocnetwork(
  net_handle_t network
)

Binds the current process to |network|.

All sockets created in the future (and not explicitly bound via android_setsocknetwork()) will be bound to |network|. All host name resolutions will be limited to |network| as well. Note that if the network identified by |network| ever disconnects, all sockets created in this way will cease to work and all host name resolutions will fail. This is by design so an application doesn't accidentally use sockets it thinks are still bound to a particular network.

To clear a previous process binding, invoke with NETWORK_UNSPECIFIED.

This is the equivalent of: android.net.ConnectivityManager::setProcessDefaultNetwork())

android_setsocknetwork

int android_setsocknetwork(
  net_handle_t network,
  int fd
)

All functions below that return an int return 0 on success or -1 on failure with an appropriate errno value set.

Set the network to be used by the given socket file descriptor.

To clear a previous socket binding, invoke with NETWORK_UNSPECIFIED.

This is the equivalent of: android.net.Network::bindSocket())