1# 0.7.9 2 3## Fixes 4 5* Fix error handling in `NamedPipe::write` 6 (https://github.com/tokio-rs/mio/commit/aec872be9732e5c6685100674278be27f54a271b). 7* Use `accept(2)` on x86 Android instead of `accept4(2)` 8 (https://github.com/tokio-rs/mio/commit/6f86b925d3e48f30905d5cfa54348acf3f1fa036, 9 https://github.com/tokio-rs/mio/commit/8d5414880ab82178305ac1d2c16d715e58633d3e). 10* Improve error message when opening AFD device 11 (https://github.com/tokio-rs/mio/commit/139f7c4422321eb4a17b14ae2c296fddd19a8804). 12 13# 0.7.8 14 15## Fixes 16 17* Fix `TcpStream::set_linger` on macOS 18 (https://github.com/tokio-rs/mio/commit/175773ce02e85977db81224c782c8d140aba8543). 19* Fix compilation on DragonFlyBSD 20 (https://github.com/tokio-rs/mio/commit/b51af46b28871f8dd3233b490ee62237ffed6a26). 21 22# 0.7.7 23 24## Added 25 26* `UdpSocket::only_v6` 27 (https://github.com/tokio-rs/mio/commit/0101e05a800f17fb88f4315d9b9fe0f08cca6e57). 28* `Clone` implementation for `Event` 29 (https://github.com/tokio-rs/mio/commit/26540ebbae89df6d4d08465c56f715d8f2addfc3). 30* `AsRawFd` implementation for `Registry` 31 (https://github.com/tokio-rs/mio/commit/f70daa72da0042b1880256164774c3286d315a02). 32* `Read` and `Write` implementation for `&unix::pipe::Sender` and `Receiver`, 33 that is on the reference to them, an implementation existed on the types 34 themselves already 35 (https://github.com/tokio-rs/mio/commit/1be481dcbbcb6906364008b5d61e7f53cddc3eb3). 36 37 38## Fixes 39 40* Underflow in `SocketAddr::address` 41 (https://github.com/tokio-rs/mio/commit/6d3fa69240cd4bb95e9d34605c660c30245a18bd). 42* Android build with the net feature enabled, but with os-poll disabled 43 (https://github.com/tokio-rs/mio/commit/49d8fd33e026ad6e2c055d05d6667180ba2af7be). 44* Solaris build with the net feature enabled, but with os-poll disabled 45 (https://github.com/tokio-rs/mio/commit/a6e025e9d9511639ec106ebedc0dd312bdc9be12). 46* Ensure that `Waker::wake` works on illumos systems with poor `pipe(2)` and 47 `epoll(2)` interaction using `EPOLLET` 48 (https://github.com/tokio-rs/mio/commit/943d4249dcc17cd8b4d2250c4fa19116097248fa). 49* Fix `unix::pipe` on illumos 50 (https://github.com/tokio-rs/mio/commit/0db49f6d5caf54b12176821363d154384357e70a). 51 52# 0.7.6 53 54## Added 55 56* `net` feature, replaces `tcp`, `udp` and `uds` features 57 (https://github.com/tokio-rs/mio/commit/a301ba520a8479b459c4acdcefa4a7c5eea818c7). 58* `os-ext` feature, replaces `os-util` and `pipe` features 59 (https://github.com/tokio-rs/mio/commit/f5017fae8a3d3bb4b4cada25b01a2d76a406badc). 60* Added keepalive support to `TcpSocket` 61 (https://github.com/tokio-rs/mio/commit/290c43a96662d54ab7c4b8814e5a9f9a9e523fda). 62* `TcpSocket::set_{send, recv}_buffer_size` 63 (https://github.com/tokio-rs/mio/commit/40c4af79bf5b32b8fbdbf6f2e5c16290e1d3d406). 64* `TcpSocket::get_linger` 65 (https://github.com/tokio-rs/mio/commit/13e82ced655bbb6e2729226e485a7de9f2c2ccd9). 66* Implement `IntoRawFd` for `TcpSocket` 67 (https://github.com/tokio-rs/mio/commit/50548ed45d0b2c98f1f2e003e210d14195284ef4). 68 69## Deprecated 70 71* The `tcp`, `udp` and `uds` features, replaced by a new `net` feature. 72 (https://github.com/tokio-rs/mio/commit/a301ba520a8479b459c4acdcefa4a7c5eea818c7). 73* The `extra-docs` feature, now enabled by default. 74 (https://github.com/tokio-rs/mio/commit/25731e8688a2d91c5c700674a2c2d3841240ece1). 75* The `os-util` and `pipe` features, replaced by a new `os-ext` feature. 76 (https://github.com/tokio-rs/mio/commit/f5017fae8a3d3bb4b4cada25b01a2d76a406badc). 77 78## Fixes 79 80* Incorrect assumption of the layout of `std::net::SocketAddr`. Previously Mio 81 would assume that `SocketAddrV{4,6}` had the same layout as 82 `libc::sockaddr_in(6)`, however this is not guaranteed by the standard 83 library. 84 (https://github.com/tokio-rs/mio/commit/152e0751f0be1c9b0cbd6778645b76bcb0eba93c). 85* Also bumped the miow dependency to version 0.3.6 to solve the same problem as 86 above. 87 88# 0.7.5 89 90## Added 91 92* `TcpSocket::get_localaddr()` retrieves local address 93 (https://github.com/tokio-rs/mio/commit/b41a022b2242eef1969c70c8ba93e04c528dba47). 94* `TcpSocket::set_reuseport()` & `TcpSocket::get_reuseport()` configures and reads `SO_REUSEPORT` 95 (https://github.com/tokio-rs/mio/commit/183bbe409ab69cbf9db41d0263b41ec86202d9a0). 96* `unix:pipe()` a wrapper around pipe(2) sys call 97 (https://github.com/tokio-rs/mio/commit/2b7c0967a7362303946deb3d4ca2ae507af6c72d). 98* Add a check that a single Waker is active per Poll instance (only in debug mode) 99 (https://github.com/tokio-rs/mio/commit/f4874f28b32efcf4841691884c65a89734d96a56). 100* Added `Interest:remove()` 101 (https://github.com/tokio-rs/mio/commit/b8639c3d9ac07bb7e2e27685680c8a6510fa1357). 102 103# 0.7.4 104 105## Fixes 106 107* lost "socket closed" events on windows 108 (https://github.com/tokio-rs/mio/commit/50c299aca56c4a26e5ed20c283007239fbe6a7a7). 109 110## Added 111 112* `TcpSocket::set_linger()` configures SO_LINGER 113 (https://github.com/tokio-rs/mio/commit/3b4096565c1a879f651b8f8282ecdcbdbd5c92d3). 114 115# 0.7.3 116 117## Added 118 119* `TcpSocket` for configuring a TCP socket before connecting or listening 120 (https://github.com/tokio-rs/mio/commit/5b09e60d0f64419b989bda88c86a3147334a03b3). 121 122# 0.7.2 123 124## Added 125 126* Windows named pipe support. 127 (https://github.com/tokio-rs/mio/commit/52e8c2220e87696d20f13561402bcaabba4136ed). 128 129# 0.7.1 130 131## Reduced support for 32-bit Apple targets 132 133In January 2020 Rust reduced its support for 32-bit Apple targets 134(https://blog.rust-lang.org/2020/01/03/reducing-support-for-32-bit-apple-targets.html). 135Starting with v0.7.1 Mio will do the same as we're no longer checking 32 bit 136iOS/macOS on our CI. 137 138## Added 139 140* Support for illumos 141 (https://github.com/tokio-rs/mio/commit/976f2354d0e8fbbb64fba3bf017d7131f9c369a0). 142* Report `epoll(2)`'s `EPOLLERR` event as `Event::is_write_closed` if it's the 143 only event 144 (https://github.com/tokio-rs/mio/commit/0c77b5712d675eeb9bd43928b5dd7d22b2c7ac0c). 145* Optimised event::Iter::{size_hint, count} 146 (https://github.com/tokio-rs/mio/commit/40df934a11b05233a7796c4de19a4ee06bc4e03e). 147 148## Fixed 149 150* Work around Linux kernel < 2.6.37 bug on 32-bits making timeouts longer then 151 ~30 minutes effectively infinite 152 (https://github.com/tokio-rs/mio/commit/d555991f5ee81f6c1eec0fe481557d3d5b8d5ff4). 153* Set `SO_NOSIGPIPE` on all sockets (not just UDP) on for Apple targets 154 (https://github.com/tokio-rs/mio/commit/b8bbdcb0d3236f4c4acb257996d42a88dc9987d9). 155* Properly handle `POLL_ABORT` on Windows 156 (https://github.com/tokio-rs/mio/commit/a98da62b3ed1eeed1770aaca12f46d647e4fa749). 157* Improved error handling around failing `SIO_BASE_HANDLE` calls on Windows 158 (https://github.com/tokio-rs/mio/commit/b15fc18458a79ef8a51f73effa92548650f4e5dc). 159 160## Changed 161 162* On NetBSD we now use `accept4(2)` 163 (https://github.com/tokio-rs/mio/commit/4e306addc7144f2e02a7e8397c220b179a006a19). 164* The package uploaded to crates.io should be slightly smaller 165 (https://github.com/tokio-rs/mio/commit/eef8d3b9500bc0db957cd1ac68ee128ebc68351f). 166 167## Removed 168 169* Dependency on `lazy_static` on Windows 170 (https://github.com/tokio-rs/mio/commit/57e4c2a8ac153bc7bb87829e22cf0a21e3927e8a). 171 172# 0.7.0 173 174Version 0.7 of Mio contains various major changes compared to version 0.6. 175Overall a large number of API changes have been made to reduce the complexity of 176the implementation and remove overhead where possible. 177 178Please refer to the [blog post about 1790.7-alpha.1](https://tokio.rs/blog/2019-12-mio-v0.7-alpha.1/) for additional 180information. 181 182## Added 183 184* `Interest` structure that replaces `Ready` in registering event sources. 185* `Registry` structure that separates the registering and polling functionality. 186* `Waker` structure that allows another thread to wake a thread polling `Poll`. 187* Unix Domain Socket (UDS) types: `UnixDatagram`, `UnixListener` and 188 `UnixStream`. 189 190## Removed 191 192* All code deprecated in 0.6 was removed in 0.7. 193* Support for Fuchsia was removed as the code was unmaintained. 194* Support for Bitrig was removed, rustc dropped support for it also. 195* `UnixReady` was merged into `Ready`. 196* Custom user-space readiness queue was removed, this includes the public 197 `Registration` and `SetReadiness` types. 198* `PollOpt` was removed and all registrations use edge-triggers. See the upgrade 199 guide on how to process event using edge-triggers. 200* The network types (types in the `net` module) now support only the same API as 201 found in the standard library, various methods on the types were removed. 202* `TcpStream` now supports vectored I/O. 203* `Poll::poll_interruptible` was removed. Instead `Poll::poll` will now return 204 an error if one occurs. 205* `From<usize>` is removed from `Token`, the internal field is still public, so 206 `Token(my_token)` can still be used. 207 208## Changed 209 210* Various documentation improvements were made around correct usage of `Poll` 211 and registered event sources. It is recommended to reread the documentation of 212 at least `event::Source` and `Poll`. 213* Mio now uses Rust 2018 and rustfmt for all code. 214* `Event` was changed to be a wrapper around the OS event. This means it can be 215 significantly larger on some OSes. 216* `Ready` was removed and replaced with various `is_*` methods on `Event`. For 217 example instead checking for readable readiness using 218 `Event::ready().is_readable()`, you would call `Event::is_readable()`. 219* `Ready::is_hup` was removed in favour of `Event::is_read_closed` and 220 `Event::is_write_closed`. 221* The Iterator implementation of `Events` was changed to return `&Event`. 222* `Evented` was renamed to `event::Source` and now takes mutable reference to 223 the source. 224* Minimum supported Rust version was increased to 1.39. 225* By default Mio now uses a shim implementation. To enable the full 226 implementation, that uses the OS, enable the `os-oll` feature. To enable the 227 network types use `tcp`, `udp` and/or `uds`. For more documentation on the 228 features see the `feature` module in the API documentation (requires the 229 `extra-docs` feature). 230* The entire Windows implementation was rewritten. 231* Various optimisation were made to reduce the number of system calls in 232 creating and using sockets, e.g. making use of `accept4(2)`. 233* The `fmt::Debug` implementation of `Events` is now actually useful as it 234 prints all `Event`s. 235 236# 0.6.23 (Dec 01, 2020) 237 238### Changed 239- **MSRV**: Increased the MSRV from 1.18.0 (Jun 8, 2017) to 1.31.0 (Dec 6, 240 2018) 241 (https://github.com/tokio-rs/mio/commit/4879e0d32ddfd98e762fc87240e594a3ad8fca30). 242 243### Fixed 244- Work around Linux kernel < 2.6.37 bug on 32-bits making timeouts longer then 245 ~30 minutes effectively infinite 246 (https://github.com/tokio-rs/mio/commit/e7cba59950e9c9fa6194e29b5b1e72029e3df455). 247- Update miow and net2 depedencies to get rid of invalid memory layout assumption 248 (https://github.com/tokio-rs/mio/commit/13f02ac0a86d7c0c0001e5ff8960a0b4340d075c). 249 250# 0.6.22 (May 01, 2020) 251 252### Added 253- Add support for illumos target (#1294) 254 255# 0.6.21 (November 27, 2019) 256 257### Fixed 258- remove `=` dependency on `cfg-if`. 259 260# 0.6.20 (November 21, 2019) 261 262### Fixed 263- Use default IOCP concurrency value (#1161). 264- setting FD_CLOEXEC in pipe (#1095). 265 266# 0.6.19 (May 28, 2018) 267 268### Fixed 269- Do not trigger HUP events on kqueue platforms (#958). 270 271# 0.6.18 (May 24, 2018) 272 273### Fixed 274- Fix compilation on kqueue platforms with 32bit C long (#948). 275 276# 0.6.17 (May 15, 2018) 277 278### Fixed 279- Don't report `RDHUP` as `HUP` (#939) 280- Fix lazycell related compilation issues. 281- Fix EPOLLPRI conflicting with READABLE 282- Abort process on ref count overflows 283 284### Added 285- Define PRI on all targets 286 287# 0.6.16 (September 5, 2018) 288 289* Add EPOLLPRI readiness to UnixReady on supported platforms (#867) 290* Reduce spurious awaken calls (#875) 291 292# 0.6.15 (July 3, 2018) 293 294* Implement `Evented` for containers (#840). 295* Fix android-aarch64 build (#850). 296 297# 0.6.14 (March 8, 2018) 298 299* Add `Poll::poll_interruptible` (#811) 300* Add `Ready::all` and `usize` conversions (#825) 301 302# 0.6.13 (February 5, 2018) 303 304* Fix build on DragonFlyBSD. 305* Add `TcpListener::from_std` that does not require the socket addr. 306* Deprecate `TcpListener::from_listener` in favor of from_std. 307 308# 0.6.12 (January 5, 2018) 309 310* Add `TcpStream::peek` function (#773). 311* Raise minimum Rust version to 1.18.0. 312* `Poll`: retry select() when interrupted by a signal (#742). 313* Deprecate `Events` index access (#713). 314* Add `Events::clear` (#782). 315* Add support for `lio_listio` (#780). 316 317# 0.6.11 (October 25, 2017) 318 319* Allow register to take empty interest (#640). 320* Fix bug with TCP errors on windows (#725). 321* Add TcpListener::accept_std (#733). 322* Update IoVec to fix soundness bug -- includes behavior change. (#747). 323* Minimum Rust version is now 1.14.0. 324* Fix Android x86_64 build. 325* Misc API & doc polish. 326 327# 0.6.10 (July 27, 2017) 328 329* Experimental support for Fuchsia 330* Add `only_v6` option for UDP sockets 331* Fix build on NetBSD 332* Minimum Rust version is now 1.13.0 333* Assignment operators (e.g. `|=`) are now implemented for `Ready` 334 335# 0.6.9 (June 7, 2017) 336 337* More socket options are exposed through the TCP types, brought in through the 338 `net2` crate. 339 340# 0.6.8 (May 26, 2017) 341 342* Support Fuchia 343* POSIX AIO support 344* Fix memory leak caused by Register::new2 345* Windows: fix handling failed TCP connections 346* Fix build on aarch64-linux-android 347* Fix usage of `O_CLOEXEC` with `SETFL` 348 349# 0.6.7 (April 27, 2017) 350 351* Ignore EPIPE coming out of `kevent` 352* Timer thread should exit when timer is dropped. 353 354# 0.6.6 (March 22, 2017) 355 356* Add send(), recv() and connect() to UDPSocket. 357* Fix bug in custom readiness queue 358* Move net types into `net` module 359 360# 0.6.5 (March 14, 2017) 361 362* Misc improvements to kqueue bindings 363* Add official support for iOS, Android, BSD 364* Reimplement custom readiness queue 365* `Poll` is now `Sync` 366* Officially deprecate non-core functionality (timers, channel, etc...) 367* `Registration` now implements `Evented` 368* Fix bug around error conditions with `connect` on windows. 369* Use iovec crate for scatter / gather operations 370* Only support readable and writable readiness on all platforms 371* Expose additional readiness in a platform specific capacity 372 373# 0.6.4 (January 24, 2017) 374 375* Fix compilation on musl 376* Add `TcpStream::from_stream` which converts a std TCP stream to Mio. 377 378# 0.6.3 (January 22, 2017) 379 380* Implement readv/writev for `TcpStream`, allowing vectored reads/writes to 381 work across platforms 382* Remove `nix` dependency 383* Implement `Display` and `Error` for some channel error types. 384* Optimize TCP on Windows through `SetFileCompletionNotificationModes` 385 386# 0.6.2 (December 18, 2016) 387 388* Allow registration of custom handles on Windows (like `EventedFd` on Unix) 389* Send only one byte for the awakener on Unix instead of four 390* Fix a bug in the timer implementation which caused an infinite loop 391 392# 0.6.1 (October 30, 2016) 393 394* Update dependency of `libc` to 0.2.16 395* Fix channel `dec` logic 396* Fix a timer bug around timeout cancellation 397* Don't allocate buffers for TCP reads on Windows 398* Touched up documentation in a few places 399* Fix an infinite looping timer thread on OSX 400* Fix compile on 32-bit OSX 401* Fix compile on FreeBSD 402 403# 0.6.0 (September 2, 2016) 404 405* Shift primary API towards `Poll` 406* `EventLoop` and types to `deprecated` mod. All contents of the 407 `deprecated` mod will be removed by Mio 1.0. 408* Increase minimum supported Rust version to 1.9.0 409* Deprecate unix domain socket implementation in favor of using a 410 version external to Mio. For example: https://github.com/alexcrichton/mio-uds. 411* Remove various types now included in `std` 412* Updated TCP & UDP APIs to match the versions in `std` 413* Enable implementing `Evented` for any type via `Registration` 414* Rename `IoEvent` -> `Event` 415* Access `Event` data via functions vs. public fields. 416* Expose `Events` as a public type that is passed into `Poll` 417* Use `std::time::Duration` for all APIs that require a time duration. 418* Polled events are now retrieved via `Events` type. 419* Implement `std::error::Error` for `TimerError` 420* Relax `Send` bound on notify messages. 421* Remove `Clone` impl for `Timeout` (future proof) 422* Remove `mio::prelude` 423* Remove `mio::util` 424* Remove dependency on bytes 425 426# 0.5.0 (December 3, 2015) 427 428* Windows support (#239) 429* NetBSD support (#306) 430* Android support (#295) 431* Don't re-export bytes types 432* Renamed `EventLoop::register_opt` to `EventLoop::register` (#257) 433* `EventLoopConfig` is now a builder instead of having public struct fields. It 434 is also no longer `Copy`. (#259) 435* `TcpSocket` is no longer exported in the public API (#262) 436* Integrate with net2. (#262) 437* `TcpListener` now returns the remote peer address from `accept` as well (#275) 438* The `UdpSocket::{send_to, recv_from}` methods are no longer generic over `Buf` 439 or `MutBuf` but instead take slices directly. The return types have also been 440 updated to return the number of bytes transferred. (#260) 441* Fix bug with kqueue where an error on registration prevented the 442 changelist from getting flushed (#276) 443* Support sending/receiving FDs over UNIX sockets (#291) 444* Mio's socket types are permanently associated with an EventLoop (#308) 445* Reduce unnecessary poll wakeups (#314) 446 447 448# 0.4.1 (July 21, 2015) 449 450* [BUGFIX] Fix notify channel concurrency bug (#216) 451 452# 0.4.0 (July 16, 2015) 453 454* [BUGFIX] EventLoop::register requests all events, not just readable. 455* [BUGFIX] Attempting to send a message to a shutdown event loop fails correctly. 456* [FEATURE] Expose TCP shutdown 457* [IMPROVEMENT] Coalesce readable & writable into `ready` event (#184) 458* [IMPROVEMENT] Rename TryRead & TryWrite function names to avoid conflict with std. 459* [IMPROVEMENT] Provide TCP and UDP types in Mio (path to windows #155) 460* [IMPROVEMENT] Use clock_ticks crate instead of time (path to windows #155) 461* [IMPROVEMENT] Move unix specific features into mio::unix module 462* [IMPROVEMENT] TcpListener sets SO_REUSEADDR by default 463