summaryrefslogtreecommitdiffstats
path: root/tokio/src/net/tcp
AgeCommit message (Collapse)Author
2020-12-06net: add TcpStream::into_std (#3189)Fuyang Liu
2020-11-18io: add vectored writes to `AsyncWrite` (#3149)Sean McArthur
This adds `AsyncWrite::poll_write_vectored`, and implements it for `TcpStream` and `UnixStream`. Refs: #3135.
2020-11-17net: add SO_LINGER get/set to TcpStream (#3143)Zeki Sherif
2020-11-16net: add UdpSocket readiness and non-blocking ops (#3138)Carl Lerche
Adds `ready()`, `readable()`, and `writable()` async methods for waiting for socket readiness. Adds `try_send`, `try_send_to`, `try_recv`, and `try_recv_from` for performing non-blocking operations on the socket. This is the UDP equivalent of #3130.
2020-11-16net: Add send/recv buf size methods to `TcpSocket` (#3145)Eliza Weisman
This commit adds `set_{send, recv}_buffer_size` methods to `TcpSocket` for setting the size of the TCP send and receive buffers, and `{send, recv}_buffer_size` methods for returning the current value. These just call into similar methods on `mio`'s `TcpSocket` type, which were added in tokio-rs/mio#1384. Refs: #3082 Signed-off-by: Eliza Weisman <eliza@buoyant.io>
2020-11-16net: restore TcpStream::{poll_read_ready, poll_write_ready} (#2743)masnagam
2020-11-13net: add missing doc cfg on TcpSocket (#3137)Carl Lerche
This adds the missing `net` feature flag in the generated API documentation.
2020-11-12net: add TcpStream::ready and non-blocking ops (#3130)Carl Lerche
Adds function to await for readiness on the TcpStream and non-blocking read/write functions. `async fn TcpStream::ready(Interest)` waits for socket readiness satisfying **any** of the specified interest. There are also two shorthand functions, `readable()` and `writable()`. Once the stream is in a ready state, the caller may perform non-blocking operations on it using `try_read()` and `try_write()`. These function return `WouldBlock` if the stream is not, in fact, ready. The await readiness function are similar to `AsyncFd`, but do not require a guard. The guard in `AsyncFd` protect against a potential race between receiving the readiness notification and clearing it. The guard is needed as Tokio does not control the operations. With `TcpStream`, the `try_read()` and `try_write()` function handle clearing stream readiness as needed. This also exposes `Interest` and `Ready`, both defined in Tokio as wrappers for Mio types. These types will also be useful for fixing #3072 . Other I/O types, such as `TcpListener`, `UdpSocket`, `Unix*` should get similar functions, but this is left for later PRs. Refs: #3130
2020-11-11io: driver internal cleanup (#3124)Carl Lerche
* Removes duplicated code by moving it to `Registration`. * impl `Deref` for `PollEvented` to avoid `get_ref()`. * Avoid extra waker clones in I/O driver. * Add `Interest` wrapper around `mio::Interest`.
2020-11-06net: add set_nonblocking to doc (#3100)Alice Ryhl
2020-11-02net: add get/set reuseport, reuseaddr, localaddr for TcpSocket (#3083)Zeki Sherif
2020-10-27net: change mention of net2 (#3056)Zahari Dichev
2020-10-24docs: update docs for `from_std` functions (#3016)Zahari Dichev
Fixes: #3007
2020-10-22net: fix typo (#3023)Zhang Jingqiang
2020-10-19docs: adjust TcpListener::from_std documentation to match behavior (#3002)pluth
2020-10-12meta: combine `net` and `dns`, use `parking_lot` (#2951)Carl Lerche
This combines the `dns` and `net` feature flags. Previously, `dns` was included as part of `net`. Given that is is rare that one would want `dns` without `net`, DNS is now entirely gated w/ `net`. The `parking_lot` feature is included as part of `full`. Some misc docs are tweaked to reflect feature flag changes.
2020-10-13net: merge tcp, udp, uds features to net feature (#2943)Taiki Endo
2020-10-12io: Rename `ReadBuf` methods (#2945)Lucio Franco
This changes `ReadBuf::add_filled` to `ReadBuf::advance` and `ReadBuf::append` to `ReadBuf::put_slice`. This is just a mechanical change. Closes #2769
2020-10-09net: switch socket methods to &self (#2934)Carl Lerche
Switches various socket methods from &mut self to &self. This uses the intrusive waker infrastructure to handle multiple waiters. Refs: #2928
2020-10-08net: use &self with TcpListener::accept (#2919)Carl Lerche
Uses the infrastructure added by #2828 to enable switching `TcpListener::accept` to use `&self`. This also switches `poll_accept` to use `&self`. While doing introduces a hazard, `poll_*` style functions are considered low-level. Most users will use the `async fn` variants which are more misuse-resistant. TcpListener::incoming() is temporarily removed as it has the same problem as `TcpSocket::by_ref()` and will be implemented later.
2020-10-07net: add `TcpSocket` for configuring a socket (#2920)Carl Lerche
This enables the caller to configure the socket and to explicitly bind the socket before converting it to a `TcpStream` or `TcpListener`. Closes: #2902
2020-10-05net: implement AsRawSocket on Windows (#2911)Taiki Endo
2020-10-02io: update to Mio 0.7 (#2893)Carl Lerche
This also makes Mio an implementation detail, removing it from the public API. This is based on #1767.
2020-10-01chore: make #[doc(hidden)] apis private (#2901)Alice Ryhl
2020-09-28Seal ToSocketAddrs methods with an internal argument (#2892)Sean McArthur
Closes #2891
2020-09-24io: remove poll_{read,write}_buf from traits (#2882)Carl Lerche
These functions have object safety issues. It also has been decided to avoid vectored operations on the I/O traits. A later PR will bring back vectored operations on specific types that support them. Refs: #2879, #2716
2020-09-24chore: Use IoSlice's Copy impl to clean up some repetitive code (#2875)bdonlan
As we go into 0.3 we no longer need to support older versions of Rust where IoSlice did not implement Copy and Clone, so we can more easily initialize the IoSlice array in net::tcp::stream. Co-authored-by: Bryan Donlan <bdonlan@amazon.com>
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
2020-09-23net: change `UnixListener::poll_accept` to public (#2845)kalcutter
2020-08-27rt: Refactor `Runtime::block_on` to take `&self` (#2782)Lucio Franco
Co-authored-by: Eliza Weisman <eliza@buoyant.io>
2020-08-13io: change AsyncRead to use a ReadBuf (#2758)Sean McArthur
Works towards #2716. Changes the argument to `AsyncRead::poll_read` to take a `ReadBuf` struct that safely manages writes to uninitialized memory.
2020-07-24net: ensure that unix sockets have both split and into_split (#2687)Alice Ryhl
The documentation build failed with errors such as error: `[read]` public documentation for `take` links to a private item --> tokio/src/io/util/async_read_ext.rs:1078:9 | 1078 | / /// Creates an adaptor which reads at most `limit` bytes from it. 1079 | | /// 1080 | | /// This function returns a new instance of `AsyncRead` which will read 1081 | | /// at most `limit` bytes, after which it will always return EOF ... | 1103 | | /// } 1104 | | /// ``` | |_______________^ | note: the lint level is defined here --> tokio/src/lib.rs:13:9 | 13 | #![deny(intra_doc_link_resolution_failure)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = note: the link appears in this line: bytes read and future calls to [`read()`][read] may succeed.
2020-07-20dns: document that strings require the DNS feature (#2663)Alice Ryhl
2020-07-12net: fix OwnedWriteHalf behavior on drop (#2597)Carl Lerche
Previously, dropping the Write handle would issue a `shutdown(Both)`. However, shutting down the read half is not portable and not the correct action to take. This changes the behavior of OwnedWriteHalf to only perform a `shutdown(Write)` on drop.
2020-05-30docs: replace method links with intra-links (#2540)xliiv
2020-05-28net: add note about into_split's drop (#2567)Mathspy
This took me a bit to catch on to because I didn't really think there was any reason to investigate the individual documentation of each half. As someone dealing with TCP streams directly for first time (without previous experience from other languages) this caught me by surprise
2020-04-28net: mention that bind sets SO_REUSEADDR (#2454)Alice Ryhl
2020-04-23docs: make it easier to discover extension traits (#2434)Alice Ryhl
Refs: #2307
2020-04-19net: introduce owned split on TcpStream (#2270)Alice Ryhl
2020-04-13doc: fix a few broken links (#2400)xliiv
2020-04-12docs: replace some html links with rustdoc paths (#2381)xliiv
Included changes - all simple references like `<type>.<name>.html` for these types - enum - fn - struct - trait - type - simple references for methods, like struct.DelayQueue.html#method.poll Refs: #1473
2020-04-12docs: fix incorrect documentation links & formatting (#2332)Nikita Baksalyar
The streams documentation referred to module-level 'split' doc which is no longer there
2020-02-26tcp: Update listener docs (#2276)Akshay Narayan
* Update listener docs * re-wrap text and add links
2020-02-26Implement Stream for Listener types (#2275)Akshay Narayan
The Incoming types currently don't take ownership of the listener, but in most cases, users who want to use the Listener as a stream will only want to use the stream from that point on. So, implement Stream directly on the Listener types.
2020-01-28docs: minor fixes to `TcpStream` API docs (#2183)Vitor Enes
2020-01-24docs: use third form in API docs (#2027)Oleg Nosov
2020-01-22net: add `ReadHalf::{poll,poll_peak}` (#2151)Kevin Leimkuhler
The `&mut self` requirements for `TcpStream` methods ensure that there are at most two tasks using the stream--one for reading and one for writing. `TcpStream::split` allows two separate tasks to hold a reference to a single `TcpStream`. `TcpStream::{peek,poll_peek}` only poll for read readiness, and therefore are safe to use with a `ReadHalf`. Instead of duplicating `TcpStream::poll_peek`, a private method is now used by both `poll_peek` methods that uses the fact that only a `&TcpStream` is required. Closes #2136
2020-01-06doc: document `from_std` functions panic (#2056)Stepan Koltsov
Document that conversion from `std` types must be done from within the Tokio runtime context.
2019-12-21chore: fix formatting, remove old rustfmt.toml (#2007)Artem Vorotnikov
`cargo fmt` has a bug where it does not format modules scoped with feature flags.
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.