async-std-utp 0.1.0

A µTP (Micro/uTorrent Transport Library) library implemented in Rust using async-std
Documentation
# Change Log

## [0.6.3]

### Added

- Added `peer_fn` method to UtpSocket.

### Fixed

- Fixed arithmetic operation overflow when calculating the delay between peers.
- Unconnected sockets and streams no longer send fast resend requests before failing.

## [0.6.2]

### Fixed

- Fixed Windows build.

## [0.6.1]

### Added

- Packets are resent if no acknowledgment is received before timeout.
- Sockets time out after too many retransmissions (configurable), returning an error.

### Fixed

- Socket creation no longer fails with arithmetic overflow when generating a
  random connection identifier.
- SACK extension generation no longer fails with arithmetic overflow.
- Resending lost packets no longer floods the connection.
- Fixed packet extension encoding.
- Many protocol bug fixes.
- Fixed warning about Sized in trait on rustc 1.4.0-nightly (10d69db0a 2015-08-23) (RFC 1214 fallout)

## [0.6.0]

### Added

- Implemented the `Deref` trait for easy conversion from `UtpStream` instances into the underlying `UtpSocket`.

### Changed

- `UtpSocket::connect` is now a function instead of a method on a `UtpSocket` instance (i.e., it doesn't require a socket to be called).

## [0.5.1]

### Added

- Added `local_addr` for both `UtpSocket` and `UtpStream`.

## [0.5.0]

### Added

- Added `local_addr` for both `UtpSocket` and `UtpStream`.
- Added the `Into` trait for easy conversion from `UtpSocket` instances into `UtpStream`.

### Changed

- `UtpListener::accept` now returns both the new socket and the remote peer's address (`Result<UtpSocket, SocketAddr>`), similarly to `TcpListener`.
- `UtpListener::incoming` now also returns the remote peer's address, similarly to `accept` but unlike `TcpListener::incoming`.

## [0.4.0]

### Added

- Added `UtpListener` (similar to [`TcpListener`][http://doc.rust-lang.org/std/net/struct.TcpListener.html]).

## [0.3.1]

### Fixed

- Removed assertions about `off_target`, which were killing innocent connections.

## [0.3.0]

### Fixed

- Fixed bug when adjusting congestion window caused by miscalculating the delay between peers.
- Fixed bug where missing packets weren't being re-sent after sending a FIN.
- Fixed bug where a stream wouldn't bind to an address of the appropriate family when the remote peer had an IPv6 address.
- Fixed bug where the congestion window would only shrink when packet loss was detected and not on delay changes.

### Changed

- A call to `UtpStream::write` or `UtpSocket::send_to` no longer blocks until every packet is acknowledged. To force the old, slower behaviour, call `flush` after the usual calls (usually you won't need to do this, as the socket/stream is flushed on close/drop).

## [0.2.8]

### Fixed

- Fixed bug where extensions could be skipped when parsing a packet.
- Improved reliability of packet parsing.

## [0.2.7]

### Fixed

- Fixed compilation errors in 1.0.0-beta.2

### Changed

- Improved resilience to errors --- receiving an invalid packet no longer leads to a panic
- Sockets with established connections refuse new connections

## [0.2.6]

No functional changes.

### Changed

- Removed stability attributes.
- Removed an unnecessary partial clone when handling a received packet.

## [0.2.5]

### Changed

- Dropping an `UtpSocket` (or a wrapping struct like `UtpStream`) properly closes open connections.

## [0.2.4]

Improved performance encoding and decoding packets.

## [0.2.3]

### Fixed
- Now the crate builds in both the latest nightly and 1.0.0-beta.

## [0.2.2]

No functional changes, mostly just changes to conform to changes in the Rust API.

## [0.2.1]

### Changed
- Updated the `rand` dependency because the previous one didn't build on the latest Rust nightly.

### Fixed
- Some `UtpStream` tests were failing because of improperly sized buffers.

## [0.2.0]

This release is now compatible with the 2015-03-28 nightly of the Rust compiler.
Some things changed during the migration to the new `std::net` API and performance is now much lower. It might take me a while to come up with performance improvements and a replacement for the lost `set_timeout` method in `UdpSocket`.

### Changed
- Updated example in README.
- `UtpStream` and `UtpSocket` now accept variables implementing the `ToSocketAddrs` trait, like `UdpSocket` in the standard library.
- Reading from a socket now returns `Result<(usize, SocketAddr)>`.
- Reading from a stream now returns `Result<usize>`.
- Reading from a closed socket/stream now returns `Ok((0, remote_peer))`/`Ok(0)` instead of `Err(Closed)`.

### Added
- `UtpStream` now implements the `Read` and `Write` traits.

### Removed
- The `Reader` and `Writer` traits were removed, in accordance to the recent IO reform in Rust.
- Support for connection timeouts were removed, which may impact packet loss handling in some cases.