文章目录
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也不会断开数据连接通道