1 函数及文件的调用(层级)关系
调用过程
调用顺序 | 函数 | 所在文档 | 层级 |
---|---|---|---|
1 | connect() | sal_socket\ socket\ net_sockets.c | BSD socket |
2 | sal_connect() | sal_socket\ src\ sal_socket .c | SAL |
0 | lwip_socket_ops = { lwip_connect } | sal_socket\ impl \af_inet_lwip.c | regedit? |
3 | lwip_connect() | lwip\ src\ api\ sockets.c | Sequential API |
4 | netconn_connect() | lwip\ src\ api\ api_lib.c | netconn API |
5 | lwip_netconn_do_connect() | lwip\ src\ api\ api_msg.c | netconn API |
6 | tcp_connect | lwip\ src\ core\ tcp.c | RAW 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.c | socket API | int 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.c | net 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.c | Device 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 编程指南》