Chinaunix首页 | 论坛 | 博客
  • 博客访问: 508079
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: BSD

2012-03-20 08:46:31

最近有同事问起我以前修改vxworks tftpd server的代码的原因,想了半天没有想起来。直到有当时的同事提醒了我,才记得是这么回事:

vxworks实现tftpd的时候,通过server socket接收tftp请求,然后创建一个单独的任务进行文件的传输。但是为了减少对系统的负载及(此处省略一堆字)原因,对能够同时服务的tftp请求的数量进行了限制,使用的同步机制是消息队列。ftpd的流程大概是:
  1. loop start: 从server socket接收一条命令
  2. 等待可用的连接(使用消息队列),如果当前连接数量达到上限,则等待。
  3. 创建任务进行文件传输,然后转到loopstart.
而进行文件传输的任务就是传输文件,然后通过发送消息到消息队列,以通知主任务,现在可以处理新的tftp请求了。

问题来了,由于tftp client的发送到server,消息被缓存在server socket中,当连接已满的情况下,可能会过很长的时候,才轮到它被主任务读出,并进行处理,而此时client侧已经超时。尤其是如果client在超时中重发tftp请求,则会让情况变得更坏,坏到tftpd server读出来的每个请求都已经超时。
阅读(1756) | 评论(0) | 转发(0) |
0

上一篇:expect中杀死子进程

下一篇:[读书笔记] HMAC

给主人留下些什么吧!~~