今天要在某度盘下载一些大文件,当然限速很厉害…… 于是昧着良心想给 Aria2c 多加几个线程 :P 不幸原版 Aria2 硬编码写死了最高 16 线程…… 那么,开源软件我可以自己来改啊~
更新:已交叉编译得到树莓 pi ARMv7 的 1.32.0 版本,32bit 静态编译


源码 OptionHandlerFactory.cc 里搜索变量 TEXT_MAX_CONNECTION_PER_SERVER,后面的 16 改成任意整数(这里改成 10240,注意避免整型溢出),像下面这样

{
  OptionHandler* op(new NumberOptionHandler(
    PREF_MAX_CONNECTION_PER_SERVER,
    TEXT_MAX_CONNECTION_PER_SERVER,
    "1", 1, 10240, 'x'));
  op->addTag(TAG_BASIC);
  op->addTag(TAG_FTP);
  op->addTag(TAG_HTTP);
  ...
}

就解除了最高 16 线程的限制。编译完成亲测可正常开 32 线程,开太多怕翻车被封号((


其他一些窍门:

  • aria2 配置的 splitmax-connection-per-server 最好设置成相同的值,这样能够最大化利用每个线程来下载;
  • max-tries 设为 0,retry-wait 设为 5(大于零整数,不要太小),这样当线程太多而被服务器返回 50X 时能自动重连,保持总线程数不下降;
  • max-file-not-found 设为 0 (此项默认就是 0),无限等待服务器发送数据直到完成下载。

附上我编译出来 Linux x86_64 的版本,在下面的图里(图片另存为文件,改成 zip 后缀解压)。Windows 的版本也在图里,是某大神直接 hack 二进制文件得到的,上限 4096 个线程。

Linux 版本的信息:

aria2c-spam-linux: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=77198dffab8fce979c9944bf7ceb6b639358dd92, not stripped

Windows 版本的信息:

aria2c-4096-win.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows

USE AT YOUR OWN RISK! 小心使用后果自负没有保证,万一翻车不要来找我ㄟ( ▔, ▔ )ㄏ


更新:ARMv7 树莓 pi 的版本我已交叉编译得到,aria2 版本为 1.32.0,静态链接,

ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=9c4b35d24b1b1f44b68bf6e27345421e3e0296b6, stripped

所用库:

zlib/1.2.11 expat/2.2.4 sqlite3/3.20.1 OpenSSL/1.0.2l c-ares/1.13.0 libssh2/1.8.0

所以现在可以用树莓派挂机下某盘啦!高速又省电😏 可执行二进制文件大小 6.2 MB,体积较大不方便放入图片,有需求可 email 向我索要。