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