链路时延M1-M3收尾:Phase12-14基线与生产路径Δ实测、D10/E-02/D17修复、D20定位与硬化、文档整理
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user