网络
基本概念
网络模块实现了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)
|
聆听连接本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。