Skip to content
uTorrent Transport Protocol library
C++ C Python Makefile
Latest commit 3110314 Apr 25, 2016 @jpcottin jpcottin Merge pull request #90 from bittorrent/feature-modify-perf-pr
Feature modify perf Pull Request
Failed to load latest commit information.
prop_sheets Separate runtime property sheet Feb 27, 2015
.gitignore cleanup_wine Apr 8, 2014
LICENSE Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013
Makefile optimization level as variable Apr 14, 2016
README.md Update README.md to reference ucat.c as an example Sep 10, 2015
libutp-2012.vcxproj.filters Change name of compatibility source file. May 19, 2014
libutp.vcxproj remove year from solution name Apr 7, 2016
libutp_inet_ntop.cpp Compatibility for pre-Vista win32 May 19, 2014
libutp_inet_ntop.h Add missing header. May 19, 2014
parse_log.py initial import May 20, 2010
ucat.c Performance fixes and one small bugfix. Jan 6, 2016
utp.h Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013
utp_api.cpp Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013
utp_callbacks.cpp cleanup_winsockapi Mar 31, 2014
utp_callbacks.h Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013
utp_hash.cpp cleanup_winsockapi: adjustment of a few warning fixes Apr 2, 2014
utp_hash.h cleanup_winsockapi: adjustment of a few warning fixes Apr 2, 2014
utp_internal.cpp tab Apr 13, 2016
utp_internal.h Performance fixes and one small bugfix. Jan 7, 2016
utp_packedsockaddr.cpp Make libutp build on XP, Win32 post-XP, and POSIX. May 19, 2014
utp_packedsockaddr.h Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013
utp_templates.h Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013
utp_types.h remove snprintf, already defined in VS2015 Apr 7, 2016
utp_utils.cpp Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013
utp_utils.h Merge BitTorrent libutp changes from uTorrent 3.4 (alpha) May 22, 2013

README.md

libutp - The uTorrent Transport Protocol library.

Copyright (c) 2010 BitTorrent, Inc.

uTP is a TCP-like implementation of LEDBAT documented as a BitTorrent extension in BEP-29. uTP provides provides reliable, ordered delivery while maintaining minimum extra delay. It is implemented on top of UDP to be cross-platform and functional today. As a result, uTP is the primary transport for uTorrent peer-to-peer connections.

uTP is written in C++, but the external interface is strictly C (ANSI C89).

The Interface

The uTP socket interface is a bit different from the Berkeley socket API to avoid the need for our own select() implementation, and to make it easier to write event-based code with minimal buffering.

When you create a uTP socket, you register a set of callbacks. Most notably, the on_read callback is a reactive callback which occurs when bytes arrive off the network. The write side of the socket is proactive, and you call UTP_Write to indicate the number of bytes you wish to write. As packets are created, the on_write callback is called for each packet, so you can fill the buffers with data.

The libutp interface is not thread-safe. It was designed for use in a single-threaded asyncronous context, although with proper synchronization it may be used from a multi-threaded environment as well.

See utp.h for more details and other API documentation.

Example

See ucat.c. Build with:

make ucat

Building

uTP has been known to build on Windows with MSVC and on linux and OS X with gcc. On Windows, use the MSVC project files (utp.sln, and friends). On other platforms, building the shared library is as simple as:

make

To build one of the examples, which will statically link in everything it needs from libutp:

cd utp_test && make

Packaging and API

The libutp API is considered unstable, and probably always will be. We encourage you to test with the version of libutp you have, and be mindful when upgrading. For this reason, it is probably also a good idea to bundle libutp with your application.

License

libutp is released under the MIT license.

Related Work

Research and analysis of congestion control mechanisms can be found here.

Something went wrong with that request. Please try again.