链路时延M1-M3收尾:Phase12-14基线与生产路径Δ实测、D10/E-02/D17修复、D20定位与硬化、文档整理

This commit is contained in:
2026-09-22 06:12:16 +08:00
parent ac48c6d716
commit e5733b3454
42 changed files with 18294 additions and 1168 deletions
+17
View File
@@ -318,6 +318,9 @@ static int cmd_list(lftpd_client_t *client, const char *arg)
}
int err = send_list(data_sock, client->directory);
/* 传输结束必须关闭数据连接:对端以 EOF 判定"数据传完"(LIST/RETR);
* 不关会让客户端一直读到超时(曾试"优雅断开+复用监听器"方案,因该语义限制
* 与芯片行为未能稳定工作,见 链路时延实测数据分析.md D20 记录)。 */
lftpd_inet_close(data_sock);
client->data_socket = -1;
@@ -347,6 +350,9 @@ static int cmd_nlst(lftpd_client_t *client, const char *arg)
}
int err = send_nlst(data_sock, client->directory);
/* 传输结束必须关闭数据连接:对端以 EOF 判定"数据传完"(LIST/RETR);
* 不关会让客户端一直读到超时(曾试"优雅断开+复用监听器"方案,因该语义限制
* 与芯片行为未能稳定工作,见 链路时延实测数据分析.md D20 记录)。 */
lftpd_inet_close(data_sock);
client->data_socket = -1;
@@ -451,6 +457,9 @@ static int cmd_retr(lftpd_client_t *client, const char *arg)
char *path = lftpd_io_canonicalize_path(client->directory, arg);
lftpd_log_debug("send '%s'", path);
int err = send_file(data_sock, path);
/* 传输结束必须关闭数据连接:对端以 EOF 判定"数据传完"(LIST/RETR);
* 不关会让客户端一直读到超时(曾试"优雅断开+复用监听器"方案,因该语义限制
* 与芯片行为未能稳定工作,见 链路时延实测数据分析.md D20 记录)。 */
lftpd_inet_close(data_sock);
client->data_socket = -1;
@@ -507,6 +516,9 @@ static int cmd_stor(lftpd_client_t *client, const char *arg)
char *path = lftpd_io_canonicalize_path(client->directory, arg);
lftpd_log_debug("receive '%s'", path);
int err = receive_file(data_sock, path);
/* 传输结束必须关闭数据连接:对端以 EOF 判定"数据传完"(LIST/RETR);
* 不关会让客户端一直读到超时(曾试"优雅断开+复用监听器"方案,因该语义限制
* 与芯片行为未能稳定工作,见 链路时延实测数据分析.md D20 记录)。 */
lftpd_inet_close(data_sock);
client->data_socket = -1;
@@ -606,6 +618,11 @@ static int handle_control_channel(lftpd_client_t *client)
}
cleanup:
/* 数据监听器在复用模式下会跨命令保留,会话结束必须显式释放(否则每次会话泄漏一个 Socket) */
if (client->data_socket >= 0) {
lftpd_inet_close(client->data_socket);
client->data_socket = -1;
}
lftpd_inet_close(client->socket);
return 0;
}