Networking

摘要

枚举

ResNsendFlags{
  ANDROID_RESOLV_NO_RETRY = 1 << 0,
  ANDROID_RESOLV_NO_CACHE_STORE = 1 << 1,
  ANDROID_RESOLV_NO_CACHE_LOOKUP = 1 << 2
}
enum
android_res_nsend 和 android_res_nquery 函数 flags 参数的可能值。

类型定义

net_handle_t typedef
uint64_t
android.net.Network::getNetworkHandle() 返回值的对应 C 类型。

函数

android_getaddrinfofornetwork(net_handle_t network, const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)
int
通过与 |network| 关联的 DNS 服务器执行主机名解析。
android_getprocdns(net_handle_t *network)
int
获取当前进程的域名解析绑定到的 |network|。
android_getprocnetwork(net_handle_t *network)
int
获取当前进程绑定到的 |network|,与 android_setprocnetwork 设置的相同。
android_res_cancel(int nsend_fd)
void
尝试取消与 |nsend_fd| 描述符关联的进行中的查询。
android_res_nquery(net_handle_t network, const char *dname, int ns_class, int ns_type, uint32_t flags)
int
在给定 |network| 上查找与域名 |dname| 关联的 {|ns_class|, |ns_type|} 资源记录 (RR)。
android_res_nresult(int fd, int *rcode, uint8_t *answer, size_t anslen)
int
读取与 |fd| 描述符关联的查询结果。
android_res_nsend(net_handle_t network, const uint8_t *msg, size_t msglen, uint32_t flags)
int
在给定 |network| 上发出查询 |msg|。
android_setprocdns(net_handle_t network)
int
将此进程执行的域名解析绑定到 |network|。
android_setprocnetwork(net_handle_t network)
int
将当前进程绑定到 |network|。
android_setsocknetwork(net_handle_t network, int fd)
int
下面所有返回 int 的函数在成功时返回 0,失败时返回 -1 并设置相应的 errno 值。
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

枚举

ResNsendFlags

声明于 android/multinetwork.h
 ResNsendFlags

android_res_nsend 和 android_res_nquery 函数 flags 参数的可能值。

值通过位或 (OR) 组合。

属性
ANDROID_RESOLV_NO_CACHE_LOOKUP

不在缓存中查找请求。

ANDROID_RESOLV_NO_CACHE_STORE

不在缓存中查找此请求,也不缓存查找结果。

此标志隐含 ANDROID_RESOLV_NO_CACHE_LOOKUP

ANDROID_RESOLV_NO_RETRY

向单个解析器发送单个请求,并在超时或网络错误时失败。

类型定义

net_handle_t

声明于 android/multinetwork.h
uint64_t net_handle_t

android.net.Network::getNetworkHandle() 返回值的对应 C 类型。

Java 签名 long 值可以安全地转换为 net_handle_t

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

根据需要进行。

函数

android_getaddrinfofornetwork

声明于 android/multinetwork.h
int android_getaddrinfofornetwork(
  net_handle_t network,
  const char *node,
  const char *service,
  const struct addrinfo *hints,
  struct addrinfo **res
)

通过与 |network| 关联的 DNS 服务器执行主机名解析。

所有参数(除了 |network|)的使用方式与传递给 getaddrinfo(3) 的参数完全相同。返回值和错误值与 getaddrinfo(3) 相同,特别是可以按预期使用 gai_strerror(3)。类似于 getaddrinfo(3)

  • |hints| 可以为 NULL(在这种情况下,将应用手册页中记录的默认值)
  • |node| 或 |service| 可以为 NULL,但不能两者都为 NULL
  • |res| 必须不为 NULL

这等同于:android.net.Network::getAllByName()

自 API 级别 23 起可用。

android_getprocdns

声明于 android/multinetwork.h
int android_getprocdns(
  net_handle_t *network
)

获取当前进程的域名解析绑定到的 |network|。

成功时返回 0,如果传入 NULL 指针则返回 -1 并将 errno 设置为 EINVAL。

自 API 级别 31 起可用。

android_getprocnetwork

声明于 android/multinetwork.h
int android_getprocnetwork(
  net_handle_t *network
)

获取当前进程绑定到的 |network|,与 android_setprocnetwork 设置的相同。

这等同于:android.net.ConnectivityManager::getBoundNetworkForProcess() 成功时返回 0,如果传入 NULL 指针则返回 -1 并将 errno 设置为 EINVAL。

自 API 级别 31 起可用。

android_res_cancel

声明于 android/multinetwork.h
void android_res_cancel(
  int nsend_fd
)

尝试取消与 |nsend_fd| 描述符关联的进行中的查询。

自 API 级别 29 起可用。

android_res_nquery

声明于 android/multinetwork.h
int android_res_nquery(
  net_handle_t network,
  const char *dname,
  int ns_class,
  int ns_type,
  uint32_t flags
)

在给定 |network| 上查找与域名 |dname| 关联的 {|ns_class|, |ns_type|} 资源记录 (RR)。

|ns_class| 的典型值为 ns_c_in,而 |type| 可以是任何记录类型(例如 ns_t_aaaa 或 ns_t_txt)。|flags| 是用于控制实际查询行为的额外配置,详情请参阅 ResNsendFlags。

返回一个用于监视读取事件的文件描述符,如果发生立即错误则返回一个负的 POSIX 错误码(详情请参阅 errno.h)。

自 API 级别 29 起可用。

android_res_nresult

声明于 android/multinetwork.h
int android_res_nresult(
  int fd,
  int *rcode,
  uint8_t *answer,
  size_t anslen
)

读取与 |fd| 描述符关联的查询结果。

返回前关闭 |fd|。

自 29 起可用。

返回值:< 0:负的 POSIX 错误码(详情请参阅 errno.h 了解可能的值)。|rcode| 未设置。>= 0:|answer| 的长度。|rcode| 是解析器返回码(例如 ns_r_nxdomain)

android_res_nsend

声明于 android/multinetwork.h
int android_res_nsend(
  net_handle_t network,
  const uint8_t *msg,
  size_t msglen,
  uint32_t flags
)

在给定 |network| 上发出查询 |msg|。

|flags| 是用于控制实际查询行为的额外配置,详情请参阅 ResNsendFlags。

返回一个用于监视读取事件的文件描述符,如果发生立即错误则返回一个负的 POSIX 错误码(详情请参阅 errno.h)。

自 API 级别 29 起可用。

android_setprocdns

声明于 android/multinetwork.h
int android_setprocdns(
  net_handle_t network
)

将此进程执行的域名解析绑定到 |network|。

android_setprocnetwork 优先于此设置。

要清除之前的进程绑定,请使用 NETWORK_UNSPECIFIED 调用。成功时返回 0。失败时返回 -1,并设置 errno。

自 API 级别 31 起可用。

android_setprocnetwork

声明于 android/multinetwork.h
int android_setprocnetwork(
  net_handle_t network
)

将当前进程绑定到 |network|。

将来创建的所有套接字(以及未通过 android_setsocknetwork() 显式绑定的套接字)都将绑定到 |network|。所有主机名解析也将仅限于 |network|。请注意,如果 |network| 标识的网络断开连接,以这种方式创建的所有套接字将停止工作,并且所有主机名解析都将失败。这是有意为之的,以便应用程序不会意外使用它认为仍绑定到特定网络的套接字。

要清除之前的进程绑定,请使用 NETWORK_UNSPECIFIED 调用。

这等同于:android.net.ConnectivityManager::bindProcessToNetwork()

自 API 级别 23 起可用。

android_setsocknetwork

声明于 android/multinetwork.h
int android_setsocknetwork(
  net_handle_t network,
  int fd
)

下面所有返回 int 的函数在成功时返回 0,失败时返回 -1 并设置相应的 errno 值。

设置给定套接字文件描述符将使用的网络。

要清除之前的套接字绑定,请使用 NETWORK_UNSPECIFIED 调用。

这等同于:android.net.Network::bindSocket()

自 API 级别 23 起可用。

android_tag_socket

声明于 android/multinetwork.h
int android_tag_socket(
  int sockfd,
  uint32_t tag
)

android_tag_socket_with_uid

声明于 android/multinetwork.h
int android_tag_socket_with_uid(
  int sockfd,
  uint32_t tag,
  uid_t uid
)

android_untag_socket

声明于 android/multinetwork.h
int android_untag_socket(
  int sockfd
)