Networking

#include <multinetwork.h>

Summary

Enumerations

ResNsendFlags{
  ANDROID_RESOLV_NO_RETRY = 1 << 0,
  ANDROID_RESOLV_NO_CACHE_STORE = 1 << 1,
  ANDROID_RESOLV_NO_CACHE_LOOKUP = 1 << 2
}
enum
Possible values of the flags argument to android_res_nsend and android_res_nquery.

Typedefs

net_handle_t 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_getprocdns(net_handle_t *network)
int
Gets the |network| to which domain name resolutions are bound on the current process.
android_getprocnetwork(net_handle_t *network)
int
Gets the |network| bound to the current process, as per android_setprocnetwork.
android_res_cancel(int nsend_fd)
void
Attempts to cancel the in-progress query associated with the |nsend_fd| descriptor.
android_res_nquery(net_handle_t network, const char *dname, int ns_class, int ns_type, uint32_t flags)
int
Look up the {|ns_class|, |ns_type|} Resource Record (RR) associated with Domain Name |dname| on the given |network|.
android_res_nresult(int fd, int *rcode, uint8_t *answer, size_t anslen)
int
Read a result for the query associated with the |fd| descriptor.
android_res_nsend(net_handle_t network, const uint8_t *msg, size_t msglen, uint32_t flags)
int
Issue the query |msg| on the given |network|.
android_setprocdns(net_handle_t network)
int
Binds domain name resolutions performed by this process to |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.
android_tag_socket(int sockfd, uint32_t tag)
int
android_tag_socket_with_uid(int sockfd, uint32_t tag, uid_t uid)
int
android_untag_socket(int sockfd)
int

Enumerations

ResNsendFlags

 ResNsendFlags

Possible values of the flags argument to android_res_nsend and android_res_nquery.

Values are ORed together.

Properties
ANDROID_RESOLV_NO_CACHE_LOOKUP

Don't lookup the request in cache.

ANDROID_RESOLV_NO_CACHE_STORE

Don't lookup this request in the cache, and don't cache the result of the lookup.

This flag implies ANDROID_RESOLV_NO_CACHE_LOOKUP.

ANDROID_RESOLV_NO_RETRY

Send a single request to a single resolver and fail on timeout or network errors.

Typedefs

net_handle_t

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())

Available since API level 23.

android_getprocdns

int android_getprocdns(
  net_handle_t *network
)

Gets the |network| to which domain name resolutions are bound on the current process.

Returns 0 on success, or -1 setting errno to EINVAL if a null pointer is passed in.

Available since API level 31.

android_getprocnetwork

int android_getprocnetwork(
  net_handle_t *network
)

Gets the |network| bound to the current process, as per android_setprocnetwork.

This is the equivalent of: android.net.ConnectivityManager::getBoundNetworkForProcess()) Returns 0 on success, or -1 setting errno to EINVAL if a null pointer is passed in.

Available since API level 31.

android_res_cancel

void android_res_cancel(
  int nsend_fd
)

Attempts to cancel the in-progress query associated with the |nsend_fd| descriptor.

Available since API level 29.

android_res_nquery

int android_res_nquery(
  net_handle_t network,
  const char *dname,
  int ns_class,
  int ns_type,
  uint32_t flags
)

Look up the {|ns_class|, |ns_type|} Resource Record (RR) associated with Domain Name |dname| on the given |network|.

The typical value for |ns_class| is ns_c_in, while |type| can be any record type (for instance, ns_t_aaaa or ns_t_txt). |flags| is a additional config to control actual querying behavior, see ResNsendFlags for detail.

Returns a file descriptor to watch for read events, or a negative POSIX error code (see errno.h) if an immediate error occurs.

Available since API level 29.

android_res_nresult

int android_res_nresult(
  int fd,
  int *rcode,
  uint8_t *answer,
  size_t anslen
)

Read a result for the query associated with the |fd| descriptor.

Closes |fd| before returning.

Available since 29.

Returns: < 0: negative POSIX error code (see errno.h for possible values). |rcode| is not set. >= 0: length of |answer|. |rcode| is the resolver return code (e.g., ns_r_nxdomain)

android_res_nsend

int android_res_nsend(
  net_handle_t network,
  const uint8_t *msg,
  size_t msglen,
  uint32_t flags
)

Issue the query |msg| on the given |network|.

|flags| is a additional config to control actual querying behavior, see ResNsendFlags for detail.

Returns a file descriptor to watch for read events, or a negative POSIX error code (see errno.h) if an immediate error occurs.

Available since API level 29.

android_setprocdns

int android_setprocdns(
  net_handle_t network
)

Binds domain name resolutions performed by this process to |network|.

android_setprocnetwork takes precedence over this setting.

To clear a previous process binding, invoke with NETWORK_UNSPECIFIED. On success 0 is returned. On error -1 is returned, and errno is set.

Available since API level 31.

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::bindProcessToNetwork())

Available since API level 23.

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())

Available since API level 23.

android_tag_socket

int android_tag_socket(
  int sockfd,
  uint32_t tag
)

android_tag_socket_with_uid

int android_tag_socket_with_uid(
  int sockfd,
  uint32_t tag,
  uid_t uid
)

android_untag_socket

int android_untag_socket(
  int sockfd
)