Source code

Added by Alan McGovern 5014 days ago

The svn repository where MonoTorrent used to be hosted has been replaced by github. You can now check the code out from the git repository hosted at . There are a number of benefits for both you and me with this move. The biggest one is that it's now trivial for you to supply patches to MonoTorrent itself by forking the project in github (

If you're interesting in following the development of MonoTorrent, add the project to your watch list in github. If you're interested in contributing, fork it and just issue pull requests when your patch is ready. It couldn't be simpler! The first three contributed patches from Olivier Dufour were merged earlier today. Lets get the ball rolling!

MonoTorrent 0.80 (1 comment)

Added by Alan McGovern 5363 days ago

It's been 1952 days since the last release and this will be worth the wait! MonoTorrent 0.80 has been released and it contains all the usual goodness you've come to expect - enhancements, new features and bugfixes. Transfers should be more stable, endgame mode should be faster, handling of errors when writing/reading from the disk has been improved hugely. All this and there's new features too! Other peers transferring the same torrent on the local network can be discovered instantly, torrents can be downloaded without requiring the physical .torrent file to be present. So read on and find out more about the fixes/enhancements in this release and then download away!

New Features:

  • Completed a new alternative endgame mode. This new algorithm is significantly better than the previous one and should complete torrents faster than the previous mode. It also has full support for sending Cancel messages if extra unfillled requests have been made to a peer for a piece which has already been received.
  • Added support for downloading via magnet link. This is a complete implementation of the metadata exchange BEP ( It is now possible to download torrents using just the infohash, though this does require DHT to be active.
  • Add support for uTorrent style Local Peer Discovery. This respects the 'private' flag and so will not operate on torrents which are marked as private. This allows you to detect and connect to peers downloading the same torrent as you on the local network. The method used is compatible with uTorrent.


  • Reduced memory consumption when encoding peer messages.
  • Reduced memory consumption of asynchronous socket IO.
  • Optimised the new piece picking pipeline so that the common cases take very little processing time.
  • If a list of bootstrap nodes is supplied to the DHT engine and they are all inactive, attempt a second bootstrap using the utorrent servers.
  • Optimised DHT to use less memory and CPU time.

Bug Fixes

  • Ensure that malformed DHT messages are correctly ignored by the DHT engine.
  • If two active torrents had files with the same name, they could potentially be confused and treated as the same physical file, thus corrupting data.
  • Fixed issues when files with a length of zero existing exactly at the boundary between pieces resulted in the start and end index of the files being calculated incorrectly.
  • Rewrote the core to better support different download/seedings mode. Metadata exchange support is built on top of this.
  • Added much better exception handling around disk IO. Now exceptions which happen while accessing the harddisk will be caught and propagated to the corresponding torrentmanager.
  • Global upload and download limits are obeyed more accurately when combined with per-torrent limits.
  • Pending connection attempts for a particular torrent are now cancelled immediately when that torrent is stopped.
  • Reduced excess string concatenations in the BEncodedString type.
  • Fixed a rare null reference exception caused by bad threading when handling incoming connections.
  • Ensure that connections which fail to complete the encryption handshaking process within 10 seconds are closed.
  • Fixed issue where webseeds may not have been marked as being interesting.
  • Fixed overflow in download/upload rate calculations for extremely fast speeds.
  • Resolved several possible race conditions when stopping a torrent.
  • When creating a new torrent, handle the case where a directory is supplied which only contains a single file.
  • Fixed a bug when attempting to detect whether or not a query string contained the 'key' parameter.
  • Correctly handle bitfields of length zero, not that anyone would ever download a zero byte torrent...
  • Handle decoding negative bencoded numbers without crashing.
  • Added the ability to easily add webseeds to torrents created with the TorrentCreator.
  • Added an additional check to ensure that the engine doesn't double-announce when starting a torrent.
  • Use the correct string for the warning key for udp trackers

As usual, there's a precompiled binary for those of you who just want to get things done. A source tarball is there too, if you want to compile things yourself or package for your linux distro. Finally, you can check the code out from SVN if you so wish.

New website

Added by Alan McGovern 5558 days ago

My previous provider of hosting, Ty Norton, is experiencing some difficulties and can no longer host for me. However, thanks to the generosity of Mirco Bauer, has found a new home. I'd just like to thank Ty for hosting monotorrent for the last two or so years, it's greatly appreciated!

MonoTorrent 0.72

Added by Alan McGovern 5558 days ago

This is a bugfix release to address a few reported issues and also a few issues that were discovered via my own testing.

  • Add a helper method which ensures all data is flushed to disk
  • Added additional error handling to prevent malformed DHT messages crashing the library
  • Fixed issue when zeroing unused bits for torrents with an exact multiple of 32 pieces
  • Fixed issue where data could be written to the wrong file if a file with the same name existed in multiple torrents
  • Fixed the handling of torrents where the last file(s) are of zero length
  • Fixed regression with global download rate limiting
  • Fixed a performance regression with the new piece picking pipeline which resulted in lots of CPU cycles being used up on peers which have not sent an unchoke message

A precompiled binary and the sourcecode are available for download.

Also available in: Atom