axel就很少几个文件:
- ls *.h *.c
- axel.c conf.c config.h conn.h ftp.h http.h search.h tcp.h
- axel.h conf.h conn.c ftp.c http.c search.c tcp.c text.c
axel.h
axel.c
axel中把每个用于下载的连接抽象为一个axel_t的结构体,因此下载的所有操作
都是围绕这个数据结构展开的。
- axel_t *axel_new( conf_t *conf, int count, void *url )
在这个函数中,其实已经为每个连接创建好连接,并且获取到
要下载的文件信息了。
- int axel_open( axel_t *axel )
的偏移位置
- void axel_start( axel_t *axel )
服务器,而不做数据下载,因为Axel是用主线程select做下载的。其中
setup_thread 函数是连接线程的函数体.
- void axel_do( axel_t *axel )
在循环中进行如下操作,把新连接上的socket加入到集合中,使用select读取集合中所有连接
接收到的文件数据,写入连接对应的文件中。
如果有坏连接,超时的话,放弃该连接,下载失败,否则重新尝试该下载的连接建立。
- void axel_close( axel_t *axel )
- static void axel_divide( axel_t *axel )