🐞 fix(文件传输): 优化ftp服务器端口管理

This commit is contained in:
huheng@kylinos.cn 2023-04-04 10:25:59 +08:00
parent 0fd9287508
commit 514350ae81
1 changed files with 13 additions and 1 deletions

View File

@ -1125,7 +1125,8 @@ void FtpSession::writeDataToSocket(std::shared_ptr<asio::ip::tcp::socket> data_s
// we got to the end of transmission // we got to the end of transmission
me->data_buffer_.pop_front(); me->data_buffer_.pop_front();
me->sendFtpMessage(FtpReplyCode::CLOSING_DATA_CONNECTION, "Done"); me->sendFtpMessage(FtpReplyCode::CLOSING_DATA_CONNECTION, "Done");
s_freePorts.push(port); auto nowPort = data_socket->local_endpoint().port();
s_freePorts.push(nowPort);
data_socket->close(); data_socket->close();
if (me->getAcceptor().is_open()) { if (me->getAcceptor().is_open()) {
std::cout << "acceptor is open" << std::endl; std::cout << "acceptor is open" << std::endl;
@ -1171,6 +1172,17 @@ void FtpSession::receiveDataFromSocketAndWriteToFile(std::shared_ptr<IoFile> fil
me->writeDataToFile(buffer, file); me->writeDataToFile(buffer, file);
} }
me->endDataReceiving(file); me->endDataReceiving(file);
auto nowPort = data_socket->local_endpoint().port();
s_freePorts.push(nowPort);
data_socket->close();
if (me->getAcceptor().is_open()) {
std::cout << "acceptor is open" << std::endl;
asio::error_code ec;
me->getAcceptor().close(ec);
if (ec) {
std::cerr << "Error closing data acceptor: " << ec.message() << std::endl;
}
}
return; return;
} else if (length > 0) { } else if (length > 0) {
me->writeDataToFile(buffer, file, [me, file, data_socket]() { me->writeDataToFile(buffer, file, [me, file, data_socket]() {