summaryrefslogtreecommitdiffstats
path: root/examples/connect.rs
AgeCommit message (Collapse)Author
2020-09-23io: use intrusive wait list for I/O driver (#2828)Sean McArthur
This refactors I/O registration in a few ways: - Cleans up the cached readiness in `PollEvented`. This cache used to be helpful when readiness was a linked list of `*mut Node`s in `Registration`. Previous refactors have turned `Registration` into just an `AtomicUsize` holding the current readiness, so the cache is just extra work and complexity. Gone. - Polling the `Registration` for readiness now gives a `ReadyEvent`, which includes the driver tick. This event must be passed back into `clear_readiness`, so that the readiness is only cleared from `Registration` if the tick hasn't changed. Previously, it was possible to clear the readiness even though another thread had *just* polled the driver and found the socket ready again. - Registration now also contains an `async fn readiness`, which stores wakers in an instrusive linked list. This allows an unbounded number of tasks to register for readiness (previously, only 1 per direction (read and write)). By using the intrusive linked list, there is no concern of leaking the storage of the wakers, since they are stored inside the `async fn` and released when the future is dropped. - Registration retains a `poll_readiness(Direction)` method, to support `AsyncRead` and `AsyncWrite`. They aren't able to use `async fn`s, and so there are 2 reserved slots for those methods. - IO types where it makes sense to have multiple tasks waiting on them now take advantage of this new `async fn readiness`, such as `UdpSocket` and `UnixDatagram`. Additionally, this makes the `io-driver` "feature" internal-only (no longer documented, not part of public API), and adds a second internal-only feature, `io-readiness`, to group together linked list part of registration that is only used by some of the IO types. After a bit of discussion, changing stream-based transports (like `TcpStream`) to have `async fn read(&self)` is punted, since that is likely too easy of a footgun to activate. Refs: #2779, #2728
2019-12-18update connect example (#1787)João Oliveira
2019-12-18stream: add `next` and `map` utility fn (#1962)Artem Vorotnikov
Introduces `StreamExt` trait. This trait will be used to add utility functions to make working with streams easier. This patch includes two functions: * `next`: a future returning the item in the stream. * `map`: transform each item in the stream.
2019-12-13chore: remove benches and fix/work around clippy lints (#1952)Artem Vorotnikov
2019-12-03remove io workarounds from example (#1891)Juan Alvarez
This PR removes no longer needed io workarounds from connect example.
2019-11-20net: flatten `split` mod (#1797)Carl Lerche
The misc `split` types (`ReadHalf`, `WriteHalf`, `SendHalf`, `RecvHalf`) are moved up a module and the `*::split` module is removed.
2019-11-15Limit `futures` dependency to `Stream` via feature flag (#1774)Carl Lerche
In an effort to reach API stability, the `tokio` crate is shedding its _public_ dependencies on crates that are either a) do not provide a stable (1.0+) release with longevity guarantees or b) match the `tokio` release cadence. Of course, implementing `std` traits fits the requirements. The on exception, for now, is the `Stream` trait found in `futures_core`. It is expected that this trait will not change much and be moved into `std. Since Tokio is not yet going reaching 1.0, I feel that it is acceptable to maintain a dependency on this trait given how foundational it is. Since the `Stream` implementation is optional, types that are logically streams provide `async fn next_*` functions to obtain the next value. Avoiding the `next()` name prevents fn conflicts with `StreamExt::next()`. Additionally, some misc cleanup is also done: - `tokio::io::io` -> `tokio::io::util`. - `delay` -> `delay_until`. - `Timeout::new` -> `timeout(...)`. - `signal::ctrl_c()` returns a future instead of a stream. - `{tcp,unix}::Incoming` is removed (due to lack of `Stream` trait). - `time::Throttle` is removed (due to lack of `Stream` trait). - Fix: `mpsc::UnboundedSender::send(&self)` (no more conflict with `Sink` fns).
2019-11-07chore: update futures to 0.3.0 (#1741)Taiki Endo
2019-10-22codec: move into tokio-util (#1675)Carl Lerche
Related to #1318, Tokio APIs that are "less stable" are moved into a new `tokio-util` crate. This crate will mirror `tokio` and provide additional APIs that may require a greater rate of breaking changes. As examples require `tokio-util`, they are moved into a separate crate (`examples`). This has the added advantage of being able to avoid example only dependencies in the `tokio` crate.
2019-03-22chore: Fix examples not working with `cargo run` (#998)Eliza Weisman
* chore: Fix examples not working with `cargo run` ## Motivation PR #991 moved the `tokio` crate to its own subdirectory, but did not move the `examples` directory into `tokio/examples`. While attempting to use the examples for testing another change, I noticed that #991 had broken the ability to use `cargo run`, as the examples were no longer considered part of a crate that cargo was aware of: ``` tokio on master [$] via 🦀v1.33.0 at ☸️ aks-eliza-dev ➜ cargo run --example chat error: no example target named `chat` Did you mean `echo`? ``` ## Solution This branch moves the examples into the `tokio` directory, so cargo is now once again aware of them: ``` tokio on eliza/fix-examples [$] via 🦀v1.33.0 at ☸️ aks-eliza-dev ➜ cargo run --example chat Compiling tokio-executor v0.1.7 (/Users/eliza/Code/tokio/tokio-executor) Compiling tokio-reactor v0.1.9 Compiling tokio-threadpool v0.1.13 Compiling tokio-current-thread v0.1.6 Compiling tokio-timer v0.2.10 Compiling tokio-uds v0.2.5 Compiling tokio-udp v0.1.3 Compiling tokio-tcp v0.1.3 Compiling tokio-fs v0.1.6 Compiling tokio v0.1.18 (/Users/eliza/Code/tokio/tokio) Finished dev [unoptimized + debuginfo] target(s) in 7.04s Running `target/debug/examples/chat` server running on localhost:6142 ``` Signed-off-by: Eliza Weisman <eliza@buoyant.io> Signed-off-by: Eliza Weisman <eliza@buoyant.io>
2019-02-21chore: apply rustfmt to all crates (#917)Carl Lerche
2018-11-20tests: handle errors properly in examples (#748)Liran Ringel
2018-08-14Reexport Encoder, Decoder, Framed* from tokio::codec (#499)Roman
2018-06-04Create tokio-codec (#360)Bryan Burgers
Create a new tokio-codec crate with many of the contents of `tokio_io::codec`.
2018-03-22Fix `connect` example for UDP (#241)Denis
Close #241
2018-03-06Update examples to track latest Tokio changes (#180)Carl Lerche
The exampes included in the repository have lagged behind the changes made. Specifically, they do not use the new runtime construct. This patch updates examples to use the latest features of Tokio.
2018-02-07Remove `framed` fn from `UdpSocket` (#116)Carl Lerche
Instead, use `UdpFramed::new` to create a framed wrapper around the UDP socket.
2018-02-06Remove UdpCodec (#109)Roman
`UdpFramed` is updated to use the `Encoder` and `Decoder` traits from `tokio-io`.
2018-02-06Switch back to futures from crates.io (#113)Carl Lerche
Doing so requires copying the `current_thread` executor from GitHub into the repo.
2018-02-01Track futures tokio-reform branch (#88)Carl Lerche
This patch also updates tests and examples to remove deprecated API usage.
2018-01-16Fix UdpCodec::encode (#85)Roman
* Refactor UDP SendDgram & RecvDgram Get rid of unnamed structs in the favor of private structs with named fields * Change the signature of UdpCodec::encode Now it is: ``` fn encode(&mut self, msg: Self::Out, buf: &mut Vec<u8>) -> Result<SocketAddr, Self::Error>; ``` Closes https://github.com/tokio-rs/tokio/issues/79 * Fix compilation error from `mio` crate
2017-12-12Remove `Handle` argument from I/O constructors (#61)Alex Crichton
This commit removes the `Handle` argument from the following constructors * `TcpListener::bind` * `TcpStream::connect` * `UdpSocket::bind` The `Handle` argument remains on the various `*_std` constructors as they're more low-level, but this otherwise is intended to set forth a precedent of by default not taking `Handle` arguments and instead relying on the global `Handle::default` return value when necesary.
2017-12-11Remove the `Reactor::run` method (#58)Alex Crichton
This commit removes the `Reactor::run` method which has previously been used to execute futures and turn the reactor at the same time. The tests/examples made heavy usage of this method but they have now all temporarily moved to `wait()` until the futures dependency is upgraded. In the meantime this'll allow us to further trim down the `Reactor` APIs to their final state.
2017-12-05Blanket rename `Core` to `Reactor`Alex Crichton
This commit uses a script to rename `Core` to `Reactor` all at once, notably: find . -name '*.rs' | xargs sed -i 's/\bCore\b/Reactor/g'
2017-11-01Remove executor from reactor.Carl Lerche
In accordance with tokio-rs/tokio-rfcs#3, the executor functionality of Tokio is being removed and will be relocated into futures-rs as a "current thread" executor. This PR removes task execution from the code base. As a temporary mesure, all examples and tests are switched to using CpuPool. Depends on #19.
2017-10-30Rename crate to tokioCarl Lerche
2017-09-11Touch up a few examplesAlex Crichton
2017-09-11Add a UDP mode to the `connect` exampleAlex Crichton
2017-03-15Migrate to using tokio-ioAlex Crichton
Deprecate the existing `io` module in this crate entirely. More details coming soon! Closes #61
2017-02-19Rename sender in connect exampleJustin Mayhew
2016-12-20Fix connect exampleAlex Crichton
2016-12-20Touch up comments on echo, add connect exampleAlex Crichton