rt-thread SAL嵌套字抽象层

1 函数及文件的调用(层级)关系

调用过程

调用顺序函数所在文档层级
1connect()sal_socket\ socket\ net_sockets.cBSD socket
2sal_connect()sal_socket\ src\ sal_socket .cSAL
0lwip_socket_ops = { lwip_connect }sal_socket\ impl \af_inet_lwip.cregedit?
3lwip_connect()lwip\ src\ api\ sockets.cSequential API
4netconn_connect()lwip\ src\ api\ api_lib.cnetconn API
5lwip_netconn_do_connect()lwip\ src\ api\ api_msg.cnetconn API
6tcp_connectlwip\ src\ core\ tcp.cRAW TCP (callback API) 内核函数

af_inet_lwip.c

static const struct sal_socket_ops lwip_socket_ops =
{
    inet_socket,
    lwip_close,
    lwip_bind,
    lwip_listen,
    lwip_connect,
    inet_accept,
    (int (*)(int, const void *, size_t, int, const struct sockaddr *, socklen_t))lwip_sendto,
    (int (*)(int, void *, size_t, int, struct sockaddr *, socklen_t *))lwip_recvfrom,
    lwip_getsockopt,
    //TODO fix on 1.4.1
    lwip_setsockopt,
    lwip_shutdown,
    lwip_getpeername,
    inet_getsockname,
    lwip_ioctl,
#ifdef SAL_USING_POSIX
    inet_poll,
#endif
};

int ioctlsocket(int s, long cmd, void *arg)
->int sal_ioctlsocket(int socket, long cmd, void *arg)

基本函数

见net_sockets.c

文件

源文件概述函数
sal_ipaddr.c地址/字符串 互换int sal_ip4addr_aton(const char *cp, ip4_addr_t *addr)–将字符串转化地址结果给到指定地址
char *sal_ip4addr_ntoa(const ip4_addr_t *addr) --输入地址,返回字符串。
char *sal_ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen)–输入地址,返回字符串。可重入
in_addr_t sal_ipaddr_addr(const char *cp)–输入字符串地址,返回inaddr_t
sal_socket.csocket APIint sal_accept(int socket, struct sockaddr *addr, socklen_t *addrlen);
int sal_bind(int socket, const struct sockaddr *name, socklen_t namelen);
int sal_shutdown(int socket, int how);
int sal_getpeername (int socket, struct sockaddr *name, socklen_t *namelen);
int sal_getsockname (int socket, struct sockaddr *name, socklen_t *namelen);
int sal_getsockopt (int socket, int level, int optname, void *optval, socklen_t *optlen);
int sal_setsockopt (int socket, int level, int optname, const void *optval, socklen_t optlen);
int sal_connect(int socket, const struct sockaddr *name, socklen_t namelen);
int sal_listen(int socket, int backlog);
int sal_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
int sal_sendto(int socket, const void *dataptr, size_t size, int flags, const struct sockaddr *to, socklen_t tolen);
int sal_socket(int domain, int type, int protocol);
int sal_closesocket(int socket);
int sal_ioctlsocket(int socket, long cmd, void *arg);
net_netdb.cnet debug 获取网络地址信息struct hostent *gethostbyname(const char *name);
int gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);
void freeaddrinfo(struct addrinfo *ai);
int getaddrinfo(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res);
af_inet_lwip.c网络接口?int lwip_inet_init(void);
static int inet_socket(int domain, int type, int protocol)
static int inet_accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
static int inet_getsockname(int socket, struct sockaddr *name, socklen_t *namelen)
static int inet_create(struct sal_socket *socket, int type, int protocol)
net_sockets.c应用层实际调用函数
套用SAL层函数
return sal_connect(socket, name, namelen);
int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
int bind(int s, const struct sockaddr *name, socklen_t namelen)
int listen(int s, int backlog)
int recv(int s, void *mem, size_t len, int flags)
int send(int s, const void *dataptr, size_t size, int flags)
int socket(int domain, int type, int protocol)
int ioctlsocket(int s, long cmd, void *arg)
int getpeername(int s, struct sockaddr *name, socklen_t *namelen)–获取远端地址信息
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) --获取本地地址信息
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)

dfs_net.cDevice File System 设备虚拟文件系统
为应用程序提供统一的 POSIX 文件和目录操作接口
int dfs_net_getsocket(int fd)
static int dfs_net_ioctl(struct dfs_fd* file, int cmd, void* args)
static int dfs_net_read(struct dfs_fd* file, void *buf, size_t count)
static int dfs_net_write(struct dfs_fd *file, const void buf, size_t count)
static int dfs_net_close(struct dfs_fd
file)
static int dfs_net_poll(struct dfs_fd *file, struct rt_pollreq *req)

int ioctlsocket(int sockfd, long cmd, void *arg) 中 cmd相关参数查看 libc_ioctl.h
《rtthread 编程指南》

SAL 套接字抽象层
LWIP INTRODUCTION
ioctl函数详细说明

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值