fix(NET)+docs: lftpd 对端地址修复、E6 裁决收口、陷阱编号迁移重排 TRAP-NET-01~21
- lftpd:net_inet_ntoa 段序改 MSB 首 + 新增 net_getpeername,FTP 日志打印 真实对端地址(真机实证 192.168.1.2:55524,登记 TRAP-NET-21) - E6:NET_U15_PROBE 命中=0(含压测)→ 阶段 3 项 4 不立项,U15 登记观察项; 插桩留仓(宏=0 零成本),soak 驱动 test/host/e6_soak.py 入库 - 编号:全库 Trap NN → TRAP-NET-<nn> 迁移并重排连续 01~21(单调映射, 沿革见 CH395F_Trap_Records.md 头注);死号 12/13/19/21 引用全部清除; GD5F 域引用补正为 TRAP-GD5F-NN - 陷阱文档全新化:索引 21 行行行真陷阱;删误判存档/发现时间/git 考古/ FTP 附录;台架纪律教训沉淀第六章方法论 - RAM:Code 211348→211456(+108 lftpd 修复),RW+ZI 净增 +4B; 优化方案/台账受管区/tsv 同笔同步 - ftp_abort_probe.py 挪 test/host/;引用关系图重生成 - 回归:@build 0/0;@test PASS;ftp_abort 10/10;relisten :7003 20/20; ci_local L0+L0.5 全绿;E6 窗口零复位,7 条 WD stall 登记压测假象备查
This commit is contained in:
@@ -835,6 +835,8 @@ uint32_t net_inet_addr(const char *cp) {
|
||||
* 出口参数:buf - 填充字符串
|
||||
* 返回值:buf 指针(buf 为 NULL 时返回 NULL)
|
||||
* 限定条件:buf 非空且长度足够
|
||||
* 函数说明:NTOHL 后主机序数值的高字节是点分第一段(与 MCU 端同步修复,
|
||||
* N34 E13 §6:原低段在前显示成字节反转)
|
||||
*/
|
||||
char *net_inet_ntoa(uint32_t addr, char *buf) {
|
||||
uint32_t naddr = NET_NTOHL(addr);
|
||||
@@ -844,10 +846,10 @@ char *net_inet_ntoa(uint32_t addr, char *buf) {
|
||||
}
|
||||
|
||||
snprintf(buf, 16, "%lu.%lu.%lu.%lu",
|
||||
(unsigned long)(naddr & 0xFF),
|
||||
(unsigned long)((naddr >> 8) & 0xFF),
|
||||
(unsigned long)((naddr >> 24) & 0xFF),
|
||||
(unsigned long)((naddr >> 16) & 0xFF),
|
||||
(unsigned long)((naddr >> 24) & 0xFF));
|
||||
(unsigned long)((naddr >> 8) & 0xFF),
|
||||
(unsigned long)(naddr & 0xFF));
|
||||
|
||||
return buf;
|
||||
}
|
||||
@@ -945,3 +947,40 @@ int net_getsockname(int sockfd, struct net_sockaddr *addr, int *addrlen) {
|
||||
s_net_errno = NET_OK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:获取 Socket 对端地址(IP + Port)(与 MCU 端同名 API——N34 E13 §6)
|
||||
* 入口参数:sockfd - socket 描述符
|
||||
* addr - 输出:对端地址
|
||||
* addrlen - 输入输出:地址结构体长度
|
||||
* 出口参数:addr/addrlen - 填充
|
||||
* 返回值:0 成功,-1 失败(未连接 NOTCONN)
|
||||
* 限定条件:socket 已连接
|
||||
* 函数说明:经 Winsock getpeername 读取;模拟器多连接后端下 conn fd 有真实对端
|
||||
*/
|
||||
int net_getpeername(int sockfd, struct net_sockaddr *addr, int *addrlen) {
|
||||
struct sockaddr_in wsaddr;
|
||||
int wslen;
|
||||
|
||||
if (sockfd < 0 || sockfd >= NET_MAX_SOCKETS || s_socks[sockfd].in_use == 0) {
|
||||
s_net_errno = NET_ERR_BADF;
|
||||
return -1;
|
||||
}
|
||||
if (addr == NULL || addrlen == NULL ||
|
||||
*addrlen < (int)sizeof(struct net_sockaddr_in)) {
|
||||
s_net_errno = NET_ERR_INVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
wslen = sizeof(wsaddr);
|
||||
if (getpeername(s_ws[sockfd], (struct sockaddr *)&wsaddr, &wslen) == SOCKET_ERROR) {
|
||||
s_net_errno = NET_ERR_NOTCONN;
|
||||
return -1;
|
||||
}
|
||||
|
||||
from_ws_addr(&wsaddr, addr);
|
||||
*addrlen = (int)sizeof(struct net_sockaddr_in);
|
||||
|
||||
s_net_errno = NET_OK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user