修复多连接的问题

This commit is contained in:
2026-07-19 15:27:49 +08:00
parent 9ed4c22022
commit e06d849007
38 changed files with 2475 additions and 1953 deletions

View File

@@ -52,6 +52,7 @@ int net_poll(void);
* protocol - 通常为 0
* 返回值socket 描述符 (0~7),失败返回 -1
* 限定条件net_init() 已调用
* 函数说明:自动分配空闲 Socket 控制块
*/
int net_socket(int domain, int type, int protocol);
@@ -61,6 +62,8 @@ int net_socket(int domain, int type, int protocol);
* addr - 本地地址结构体指针
* addrlen - 地址结构体长度
* 返回值0 成功,-1 失败
* 限定条件socket 已创建且未绑定
* 函数说明:设置 CH395F 源端口
*/
int net_bind(int sockfd, const struct net_sockaddr *addr, int addrlen);
@@ -70,6 +73,7 @@ int net_bind(int sockfd, const struct net_sockaddr *addr, int addrlen);
* backlog - 最大等待连接数(多连接模式下为数据 Socket 数量)
* 返回值0 成功,-1 失败
* 限定条件socket 已绑定
* 函数说明:内部调用 ch395f_tcp_listen多连接模式自动配置数据 Socket
*/
int net_listen(int sockfd, int backlog);
@@ -104,7 +108,8 @@ int net_connect(int sockfd, const struct net_sockaddr *addr, int addrlen);
* len - 数据长度
* flags - 通常为 0
* 返回值:实际发送字节数,失败返回 -1
* 限定条件TCP 连接已建立
* 限定条件TCP 连接已建立,指针非空
* 函数说明:阻塞等待发送缓冲区空闲,拷贝数据后触发发送
*/
int net_send(int sockfd, const void *buf, int len, int flags);
@@ -124,13 +129,15 @@ int net_recv(int sockfd, void *buf, int len, int flags);
/*
* 函数功能:发送 UDP 数据
* 入口参数sockfd - socket 描述符
* buf - 数据缓冲区
* len - 数据长度
* flags - 通常为 0
* 入口参数sockfd - socket 描述符
* buf - 数据缓冲区
* len - 数据长度
* flags - 通常为 0
* dest_addr - 目标地址
* addrlen - 地址长度
* addrlen - 地址长度
* 返回值:实际发送字节数,失败返回 -1
* 限定条件socket 已创建,指针非空
* 函数说明:设置目标地址后调用 CH395F 发送
*/
int net_sendto(int sockfd, const void *buf, int len, int flags,
const struct net_sockaddr *dest_addr, int addrlen);
@@ -144,6 +151,8 @@ int net_sendto(int sockfd, const void *buf, int len, int flags,
* src_addr - 输出:发送方地址
* addrlen - 输入输出:地址长度
* 返回值:实际接收字节数,失败返回 -1
* 限定条件socket 已创建,指针非空
* 函数说明:读取 CH395F 接收缓冲区,获取对端地址
*/
int net_recvfrom(int sockfd, void *buf, int len, int flags,
struct net_sockaddr *src_addr, int *addrlen);
@@ -152,6 +161,8 @@ int net_recvfrom(int sockfd, void *buf, int len, int flags,
* 函数功能:关闭 socket
* 入口参数sockfd - socket 描述符
* 返回值0 成功,-1 失败
* 限定条件socket 已打开
* 函数说明:释放 Socket 控制块TCP 先断开连接
*/
int net_close(int sockfd);
@@ -165,6 +176,8 @@ int net_close(int sockfd);
* cb - 回调函数
* arg - 用户参数
* 返回值0 成功,-1 失败
* 限定条件socket 已创建
* 函数说明:回调在 net_poll 上下文中触发
*/
int net_set_event_cb(int sockfd, net_event_cb_t cb, void *arg);
@@ -181,7 +194,9 @@ int net_get_errno(void);
/*
* 函数功能:将 IP 地址字符串转为网络字节序
* 入口参数cp - 点分十进制字符串 "192.168.1.100"
* 返回值:网络字节序 IP
* 返回值:网络字节序 IP,失败返回 0
* 限定条件cp 指针非空
* 函数说明:不支持域名解析
*/
uint32_t net_inet_addr(const char *cp);
@@ -190,26 +205,43 @@ uint32_t net_inet_addr(const char *cp);
* 入口参数addr - 网络字节序 IP
* buf - 输出缓冲区(至少 16 字节)
* 返回值buf 指针
* 限定条件buf 指针非空
*/
char *net_inet_ntoa(uint32_t addr, char *buf);
/*
* 函数功能:端口字节序转换(主机序 -> 网络序)
* 入口参数hostshort - 主机序端口
* 返回值:网络序端口
* 限定条件:无
* 函数说明:小端 → 大端
*/
uint16_t net_htons(uint16_t hostshort);
/*
* 函数功能:端口字节序转换(网络序 -> 主机序)
* 入口参数netshort - 网络序端口
* 返回值:主机序端口
* 限定条件:无
* 函数说明:大端 → 小端
*/
uint16_t net_ntohs(uint16_t netshort);
/*
* 函数功能IP 地址字节序转换(主机序 -> 网络序)
* 入口参数hostlong - 主机序 IP
* 返回值:网络序 IP
* 限定条件:无
* 函数说明:小端 → 大端
*/
uint32_t net_htonl(uint32_t hostlong);
/*
* 函数功能IP 地址字节序转换(网络序 -> 主机序)
* 入口参数netlong - 网络序 IP
* 返回值:主机序 IP
* 限定条件:无
* 函数说明:大端 → 小端
*/
uint32_t net_ntohl(uint32_t netlong);