网络
基本概念
网络模块实现了TCP/IP协议栈基本功能,提供标准的POSIX socket接口。
说明: 当前系统使用lwIP提供网络能力。
使用场景
针对用户态开发,OpenHarmony内核提供了一套网络功能系统调用接口,支持socket的创建关闭、数据收发、网络属性的设置等,通过C库提供标准的POSIX socket函数供开发者使用。
功能
表 1 标准C库相关接口
| 头文件 | 接口 | 功能 |
|---|---|---|
| sys/socket.h | int accept(int socket, struct sockaddr address, socklen_t address_len) | 接受连接。 |
| sys/socket.h | int bind(int s, const struct sockaddr name, socklen_t namelen) | socket与IP地址绑定。 |
| sys/socket.h | int shutdown(int socket, int how) | 关闭连接。 |
| sys/socket.h | int getpeername(int s, struct sockaddr name, socklen_t namelen) | 获取对端地址。 |
| sys/socket.h | int getsockname(int s, struct sockaddr name, socklen_t namelen) | 获取本地地址。 |
| sys/socket.h | int getsockopt(int s, struct sockaddr name, socklen_t namelen) | 获取socket属性信息。 |
| sys/socket.h | int setsockopt(int sockfd, int level, int optname, void optval, socklen_t optlen) | 配置socket属性。 |
| unistd.h | int close(int s) | 关闭socket。 |
| sys/socket.h | int connect(int s, const struct sockaddr name, socklen_t namelen) | 连接到指定的目的IP。 |
| sys/socket.h | int listen(int sockfd, int backlog) | listen连接本socket的请求。 |
| sys/socket.h | ssize_t recv(int socket, void buffer, size_t length, int flags) | 接收socket上收到的数据。 |
| sys/socket.h | ssize_t recvmsg(int s, struct msghdr message, int flags) | 接收socket上收到的数据,可使用更丰富的参数。 |
| sys/socket.h | ssize_t recvfrom(int socket, void buffer, size_t length, int flags, struct sockaddr address, socklen_t address_len) | 接收socket上收到的数据,可同时获得数据来源IP地址。 |
| sys/socket.h | ssize_t send(int s, const void dataptr, size_t size, int flags) | 通过socket发送数据。 |
| sys/socket.h | ssize_t sendmsg(int s, const struct msghdr message, int flags) | 通过socket发送数据,可使用更丰富的参数。 |
| sys/socket.h | ssize_t sendto(int s, const void dataptr, size_t size, int flags, const struct sockaddr to, socklen_t tolen) | 通过socket发送数据,可指定发送的目的IP地址。 |
| sys/socket.h | int socket(int domain, int type, int protocol) | 创建socket。 |
| sys/select.h | int select(int nfds, fd_set readfds, fd_set writefds, fd_set exceptfds, struct timeval timeout) | 多路复用。 |
| sys/ioctl.h | int ioctl(int s, int request, …) | socket属性获取、设置。 |
| arpa/inet.h | const char inet_ntop(int af, const void src, char dst, socklen_t size) | 网络地址格式转换:将二进制格式IP地址转换为字符串格式。 |
| arpa/inet.h | int inet_pton(int af, const char src, void dst) | 网络地址格式转换:将字符串格式IP地址转换为二进制格式。 |
与标准接口差异详细说明:
- sendmsg
函数原型:
ssize_t sendmsg(int s, const struct msghdr *message, int flags)
函数功能:发送消息。
参数说明:
| 参数 | 描述 |
|---|---|
| s | 套接字。 |
| message | 待发送的消息,不支持发送ancillary消息。 |
| flags | 用于指定发送消息时行为特性,有如下行为特性: - MSG_MORE:允许将多次发送的消息进行拼包发送。 - MSG_DONTWAIT:非阻塞操作。 |
返回值:
- 成功返回:已发送的消息长度(字节数)。
-
失败返回:-1,并设置errno。
-
recvmsg
函数原型:
ssize_t recvmsg(int s, struct msghdr *message, int flags)
函数功能:接收消息。
参数说明:
| 参数 | 描述 |
|---|---|
| s | 套接字。 |
| message | 存放接收的消息,不支持接收ancillary消息。 |
| flags | 用于指定接收消息时行为特性,有如下行为特性: - MSG_PEEK:允许预读消息而不取走。 - MSG_DONTWAIT:非阻塞操作。 |
返回值:
- 成功返回:已接收的消息长度(字节数)。
-
失败返回:-1,并设置errno。
-
ioctl
函数原型:
int ioctl(int s, int request, …)
函数功能:获取或设置socket属性。
参数说明:
| 参数 | 描述 |
|---|---|
| s | 套接字 |
| request | 对socket属性要进行的操作,当前支持如下操作: - FIONREAD:获取socket当前可读取的数据大小(字节数)。 - FIONBIO:设置socket是否非阻塞。 |
返回值:
- 成功返回:0。
- 失败返回:-1,并设置errno。
说明:
当前系统使用lwIP提供网络能力。