Rasterbar Libtorrent 的简单分析

本文探讨了Rasterbar版本的Libtorrent库,主要关注其alert机制、libtorrent_exception处理、storage_interface接口和torrent_handle的功能。alert用于外部获取libtorrent中的消息和错误;libtorrent_exception提供异常处理;storage_interface允许自定义种子文件存储;torrent_handle通过set_piece_deadline等函数管理文件下载优先级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近在做的一个P2P项目需要使用到一些基础的IO,网络通信的模块,自己写的话短时间内很难达到产品级的健壮性,所以就从现有的开源项目里面抽取模块了,看了看eMule的,这东西和MFC结合紧密,而且整个项目大的可怕,要编译成功都很麻烦,更不要说去抽取它的模块了。不大靠谱。于是就研究了一下LibTorrent,不过这东西有两个。我研究的是Rasterbar的版本。现在的版本是0.15.0。不过这东西整了个openssl的功能。openssl在windows下编译麻烦死了,关键还得装个perl还是python忘了,代码也复杂了。所以我花了点时间把openssl给剥离出去。还好作者写的代码思路清晰,都用宏定义划分了不同功能的分支。

 

 

  libtorrent的类结构中最大的一个结构就是alert结构了(点击看大图).

 

 

alert

 

libtorrent的alert类结构

  对于外部程序来说,libtorrent的pop_alert()函数正是外部程序用来从libtorrent中获取各种消息、警告、错误等信息的接口。按照官方文档的说明,如果没有任何可用的这些信息的话,就自动返回一个默认构造的auto_ptr对象。由此可见。这个alert的继承树中的各种具体的对象,就分别代表了不同的信息了。对于libtorrent来说,它内部维护了一个alert的队列。此外,libtorrent默认是只保存错误消息的。可以使用set_alert_mask来设置。当然,获得了一个auto_ptr对象的话自然还必须知道具体是哪一个,所以libtorrent就使用alert_cast<>来获得具体的详细类型。alert的具体类型都定义在libtorrent/alert_types.hpp文件中。

  alert的代码是这样的:

 


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值