(P19)miniftpd项目实战19:控制连接空闲断开,数据连接空闲断开

1.控制连接空闲断开

  • (1)首先是安装信号SIGALRM,并启动定时闹钟

  • (2)如果在闹钟到来之前没有收到任何命令,则在SIGALRM信号处理程序中关闭控制连接,并给客户421 Timeout.的响应,并且退出会话。

  • vsfdtp服务器做法
    如果在5s内没有收到客户端发来的任何一条命令,那么服务端将断开与客户端之间的会话
    在这里插入图片描述
    在这里插入图片描述
    5s时到了,会断开与客户端之间的连接,给客户端一个421的应答
    在这里插入图片描述

  • eg:
    main.c中的全局变量

extern session_t *p_sess;

ftpproto.c

void start_cmdio_alarm(void)
void handle_alarm_timeout(int sig)
  • 测试:idle_session_timeout=10
    测试miniftp服务器10s钟是否超时
    在这里插入图片描述
    在这里插入图片描述

2.数据连接空闲断开

  • (1)如果当前处于数据传输的状态,那么即使控制连接通道空闲(在空闲时间内没有收到任何客户端的命令)也不应该退出会话。实现方法,只需要将先前设定的闹钟关闭掉。
  • (2)数据连接通道建立了,但是在一定时间没有传输数据,那么也应该将整个会话断开。
  • (3)大致步骤如下:
在传输数据之前安装信号SIGALRM,并启动闹钟。
在传输数据的过程中,如果收到SIGALRM信号:
如果sess->data_process = 0,则给客户端超时的响应421 Data timeout. Reconnect. Sorry.,并且退出会话。
如果sess->data_process = 1,将sess->data_process = 0; 重新安装信号SIGALRM,并启动闹钟。
  • eg:ftpproto.c
还要注意将start_data_alarm函数放的位置
void start_data_alarm(void)
void handle_sigalrm(int sig)
  • 测试:上传过程中,即使过了10s也不会断开数据连接通道
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值