LiteOS-M轻量系统内核——网络

jiecho
发布于 2021-7-21 16:47
浏览
0收藏

网络

 

基本概念

网络模块实现了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。

 

  • ioctl

    函数原型:

    int ioctl(int s, int request, ...)

    **函数功能:**获取或设置socket属性。

    参数说明:

    参数

    描述

    s

    套接字描述符。

    request

    对socket属性要进行的操作,当前支持如下操作:

    • FIONREAD:获取socket当前可读取的数据大小(字节数)。
    • FIONBIO:设置socket是否非阻塞。

    返回值:

    • 成功返回:0。
    • 失败返回:-1,并设置errno。

已于2021-7-21 16:47:02修改
收藏
回复
举报
回复
    相关推荐