This repository has been archived on 2022-04-04. You can view files and clone it, but cannot push or open issues or pull requests.
ludum-dare-50/rustdoc/tokio/net/struct.TcpSocket.html

356 lines
68 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A TCP socket that has not yet been converted to a `TcpStream` or `TcpListener`."><meta name="keywords" content="rust, rustlang, rust-lang, TcpSocket"><title>TcpSocket in tokio::net - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled><link rel="stylesheet" type="text/css" href="../../dark.css" disabled><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script src="../../crates.js"></script><script defer src="../../main.js"></script>
<noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a class="sidebar-logo" href="../../tokio/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.png" alt="logo"></div>
</a><h2 class="location">Struct TcpSocket</h2><div class="sidebar-elems"><div class="block items"><h3 class="sidebar-title"><a href="#implementations">Methods</a></h3><div class="sidebar-links"><a href="#method.bind">bind</a><a href="#method.connect">connect</a><a href="#method.from_std_stream">from_std_stream</a><a href="#method.linger">linger</a><a href="#method.listen">listen</a><a href="#method.local_addr">local_addr</a><a href="#method.new_v4">new_v4</a><a href="#method.new_v6">new_v6</a><a href="#method.recv_buffer_size">recv_buffer_size</a><a href="#method.reuseaddr">reuseaddr</a><a href="#method.reuseport">reuseport</a><a href="#method.send_buffer_size">send_buffer_size</a><a href="#method.set_linger">set_linger</a><a href="#method.set_recv_buffer_size">set_recv_buffer_size</a><a href="#method.set_reuseaddr">set_reuseaddr</a><a href="#method.set_reuseport">set_reuseport</a><a href="#method.set_send_buffer_size">set_send_buffer_size</a></div><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><div class="sidebar-links"><a href="#impl-AsRawFd">AsRawFd</a><a href="#impl-Debug">Debug</a><a href="#impl-FromRawFd">FromRawFd</a><a href="#impl-IntoRawFd">IntoRawFd</a></div><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><div class="sidebar-links"><a href="#impl-RefUnwindSafe">RefUnwindSafe</a><a href="#impl-Send">Send</a><a href="#impl-Sync">Sync</a><a href="#impl-Unpin">Unpin</a><a href="#impl-UnwindSafe">UnwindSafe</a></div><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><div class="sidebar-links"><a href="#impl-Any">Any</a><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a><a href="#impl-From%3CT%3E">From&lt;T&gt;</a><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></div></div><h2 class="location">Other items in<br><a href="../index.html">tokio</a>::<wbr><a href="index.html">net</a></h2><div id="sidebar-vars" data-name="TcpSocket" data-ty="struct" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../../tokio/index.html"><img class="rust-logo" src="../../rust-logo.png" alt="logo"></a><nav class="sub"><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><h1 class="fqn"><span class="in-band">Struct <a href="../index.html">tokio</a>::<wbr><a href="index.html">net</a>::<wbr><a class="struct" href="#">TcpSocket</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#86-88" title="goto source code">[src]</a></span></h1><div class="docblock item-decl"><pre class="rust struct"><code>pub struct TcpSocket { /* fields omitted */ }</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A TCP socket that has not yet been converted to a <code>TcpStream</code> or
<code>TcpListener</code>.</p>
<p><code>TcpSocket</code> wraps an operating system socket and enables the caller to
configure the socket before establishing a TCP connection or accepting
inbound connections. The caller is able to set socket option and explicitly
bind the socket with a socket address.</p>
<p>The underlying socket is closed when the <code>TcpSocket</code> value is dropped.</p>
<p><code>TcpSocket</code> should only be used directly if the default configuration used
by <code>TcpStream::connect</code> and <code>TcpListener::bind</code> does not meet the required
use case.</p>
<p>Calling <code>TcpStream::connect(&quot;127.0.0.1:8080&quot;)</code> is equivalent to:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">connect</span>(<span class="ident">addr</span>).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
<p>Calling <code>TcpListener::bind(&quot;127.0.0.1:8080&quot;)</code> is equivalent to:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="comment">// On platforms with Berkeley-derived sockets, this allows to quickly</span>
<span class="comment">// rebind a socket, without needing to wait for the OS to clean up the</span>
<span class="comment">// previous one.</span>
<span class="comment">//</span>
<span class="comment">// On Windows, this allows rebinding sockets which are actively in use,</span>
<span class="comment">// which allows “socket hijacking”, so we explicitly don&#39;t set it here.</span>
<span class="comment">// https://docs.microsoft.com/en-us/windows/win32/winsock/using-so-reuseaddr-and-so-exclusiveaddruse</span>
<span class="ident">socket</span>.<span class="ident">set_reuseaddr</span>(<span class="bool-val">true</span>)<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
<p>Setting socket options not explicitly provided by <code>TcpSocket</code> may be done by
accessing the <code>RawFd</code>/<code>RawSocket</code> using <a href="https://doc.rust-lang.org/std/os/unix/io/trait.AsRawFd.html"><code>AsRawFd</code></a>/<a href="https://doc.rust-lang.org/std/os/windows/io/trait.AsRawSocket.html"><code>AsRawSocket</code></a> and
setting the option with a crate like <a href="https://docs.rs/socket2/"><code>socket2</code></a>.</p>
</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#91-618" title="goto source code">[src]</a></div><a href="#impl" class="anchor"></a><h3 class="code-header in-band">impl <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.new_v4" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#121-123" title="goto source code">[src]</a></div><a href="#method.new_v4" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.new_v4" class="fnname">new_v4</a>() -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a>&gt;</h4></div></summary><div class="docblock"><p>Creates a new socket configured for IPv4.</p>
<p>Calls <code>socket(2)</code> with <code>AF_INET</code> and <code>SOCK_STREAM</code>.</p>
<h5 id="returns" class="section-header"><a href="#returns">Returns</a></h5>
<p>On success, the newly created <code>TcpSocket</code> is returned. If an error is
encountered, it is returned instead.</p>
<h5 id="examples" class="section-header"><a href="#examples">Examples</a></h5>
<p>Create a new IPv4 socket and start listening.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">128</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.new_v6" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#154-156" title="goto source code">[src]</a></div><a href="#method.new_v6" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.new_v6" class="fnname">new_v6</a>() -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a>&gt;</h4></div></summary><div class="docblock"><p>Creates a new socket configured for IPv6.</p>
<p>Calls <code>socket(2)</code> with <code>AF_INET6</code> and <code>SOCK_STREAM</code>.</p>
<h5 id="returns-1" class="section-header"><a href="#returns-1">Returns</a></h5>
<p>On success, the newly created <code>TcpSocket</code> is returned. If an error is
encountered, it is returned instead.</p>
<h5 id="examples-1" class="section-header"><a href="#examples-1">Examples</a></h5>
<p>Create a new IPv6 socket and start listening.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;[::1]:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v6</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">128</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.set_reuseaddr" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#212-214" title="goto source code">[src]</a></div><a href="#method.set_reuseaddr" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.set_reuseaddr" class="fnname">set_reuseaddr</a>(&amp;self, reuseaddr: <a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.bool.html">bool</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.unit.html">()</a>&gt;</h4></div></summary><div class="docblock"><p>Allows the socket to bind to an in-use address.</p>
<p>Behavior is platform specific. Refer to the target platforms
documentation for more details.</p>
<h5 id="examples-2" class="section-header"><a href="#examples-2">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">set_reuseaddr</span>(<span class="bool-val">true</span>)<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.reuseaddr" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#238-240" title="goto source code">[src]</a></div><a href="#method.reuseaddr" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.reuseaddr" class="fnname">reuseaddr</a>(&amp;self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.bool.html">bool</a>&gt;</h4></div></summary><div class="docblock"><p>Retrieves the value set for <code>SO_REUSEADDR</code> on this socket.</p>
<h5 id="examples-3" class="section-header"><a href="#examples-3">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">set_reuseaddr</span>(<span class="bool-val">true</span>)<span class="question-mark">?</span>;
<span class="macro">assert!</span>(<span class="ident">socket</span>.<span class="ident">reuseaddr</span>().<span class="ident">unwrap</span>());
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.set_reuseport" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#272-274" title="goto source code">[src]</a></div><a href="#method.set_reuseport" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.set_reuseport" class="fnname">set_reuseport</a>(&amp;self, reuseport: <a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.bool.html">bool</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.unit.html">()</a>&gt;</h4></div></summary><div class="docblock"><p>Allows the socket to bind to an in-use port. Only available for unix systems
(excluding Solaris &amp; Illumos).</p>
<p>Behavior is platform specific. Refer to the target platforms
documentation for more details.</p>
<h5 id="examples-4" class="section-header"><a href="#examples-4">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">set_reuseport</span>(<span class="bool-val">true</span>)<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.reuseport" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#307-309" title="goto source code">[src]</a></div><a href="#method.reuseport" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.reuseport" class="fnname">reuseport</a>(&amp;self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.bool.html">bool</a>&gt;</h4></div></summary><div class="docblock"><p>Allows the socket to bind to an in-use port. Only available for unix systems
(excluding Solaris &amp; Illumos).</p>
<p>Behavior is platform specific. Refer to the target platforms
documentation for more details.</p>
<h5 id="examples-5" class="section-header"><a href="#examples-5">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">set_reuseport</span>(<span class="bool-val">true</span>)<span class="question-mark">?</span>;
<span class="macro">assert!</span>(<span class="ident">socket</span>.<span class="ident">reuseport</span>().<span class="ident">unwrap</span>());
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.set_send_buffer_size" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#314-316" title="goto source code">[src]</a></div><a href="#method.set_send_buffer_size" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.set_send_buffer_size" class="fnname">set_send_buffer_size</a>(&amp;self, size: <a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.u32.html">u32</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.unit.html">()</a>&gt;</h4></div></summary><div class="docblock"><p>Sets the size of the TCP send buffer on this socket.</p>
<p>On most operating systems, this sets the <code>SO_SNDBUF</code> socket option.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.send_buffer_size" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#341-343" title="goto source code">[src]</a></div><a href="#method.send_buffer_size" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.send_buffer_size" class="fnname">send_buffer_size</a>(&amp;self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.u32.html">u32</a>&gt;</h4></div></summary><div class="docblock"><p>Returns the size of the TCP send buffer for this socket.</p>
<p>On most operating systems, this is the value of the <code>SO_SNDBUF</code> socket
option.</p>
<p>Note that if <a href="#method.set_send_buffer_size"><code>set_send_buffer_size</code></a> has been called on this socket
previously, the value returned by this function may not be the same as
the argument provided to <code>set_send_buffer_size</code>. This is for the
following reasons:</p>
<ul>
<li>Most operating systems have minimum and maximum allowed sizes for the
send buffer, and will clamp the provided value if it is below the
minimum or above the maximum. The minimum and maximum buffer sizes are
OS-dependent.</li>
<li>Linux will double the buffer size to account for internal bookkeeping
data, and returns the doubled value from <code>getsockopt(2)</code>. As per <code>man 7 socket</code>:
<blockquote>
<p>Sets or gets the maximum socket send buffer in bytes. The
kernel doubles this value (to allow space for bookkeeping
overhead) when it is set using <code>setsockopt(2)</code>, and this doubled
value is returned by <code>getsockopt(2)</code>.</p>
</blockquote>
</li>
</ul>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.set_recv_buffer_size" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#348-350" title="goto source code">[src]</a></div><a href="#method.set_recv_buffer_size" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.set_recv_buffer_size" class="fnname">set_recv_buffer_size</a>(&amp;self, size: <a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.u32.html">u32</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.unit.html">()</a>&gt;</h4></div></summary><div class="docblock"><p>Sets the size of the TCP receive buffer on this socket.</p>
<p>On most operating systems, this sets the <code>SO_RCVBUF</code> socket option.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.recv_buffer_size" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#375-377" title="goto source code">[src]</a></div><a href="#method.recv_buffer_size" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.recv_buffer_size" class="fnname">recv_buffer_size</a>(&amp;self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.u32.html">u32</a>&gt;</h4></div></summary><div class="docblock"><p>Returns the size of the TCP receive buffer for this socket.</p>
<p>On most operating systems, this is the value of the <code>SO_RCVBUF</code> socket
option.</p>
<p>Note that if <a href="#method.set_recv_buffer_size"><code>set_recv_buffer_size</code></a> has been called on this socket
previously, the value returned by this function may not be the same as
the argument provided to <code>set_send_buffer_size</code>. This is for the
following reasons:</p>
<ul>
<li>Most operating systems have minimum and maximum allowed sizes for the
receive buffer, and will clamp the provided value if it is below the
minimum or above the maximum. The minimum and maximum buffer sizes are
OS-dependent.</li>
<li>Linux will double the buffer size to account for internal bookkeeping
data, and returns the doubled value from <code>getsockopt(2)</code>. As per <code>man 7 socket</code>:
<blockquote>
<p>Sets or gets the maximum socket send buffer in bytes. The
kernel doubles this value (to allow space for bookkeeping
overhead) when it is set using <code>setsockopt(2)</code>, and this doubled
value is returned by <code>getsockopt(2)</code>.</p>
</blockquote>
</li>
</ul>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.set_linger" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#387-389" title="goto source code">[src]</a></div><a href="#method.set_linger" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.set_linger" class="fnname">set_linger</a>(&amp;self, dur: <a class="enum" href="https://doc.rust-lang.org/1.59.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.59.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.unit.html">()</a>&gt;</h4></div></summary><div class="docblock"><p>Sets the linger duration of this socket by setting the SO_LINGER option.</p>
<p>This option controls the action taken when a stream has unsent messages and the stream is
closed. If SO_LINGER is set, the system shall block the process until it can transmit the
data or until the time expires.</p>
<p>If SO_LINGER is not specified, and the socket is closed, the system handles the call in a
way that allows the process to continue as quickly as possible.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.linger" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#397-399" title="goto source code">[src]</a></div><a href="#method.linger" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.linger" class="fnname">linger</a>(&amp;self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.59.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/1.59.0/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>&gt;&gt;</h4></div></summary><div class="docblock"><p>Reads the linger duration for this socket by getting the <code>SO_LINGER</code>
option.</p>
<p>For more information about this option, see <a href="struct.TcpSocket.html#method.set_linger"><code>set_linger</code></a>.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.local_addr" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#423-425" title="goto source code">[src]</a></div><a href="#method.local_addr" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.local_addr" class="fnname">local_addr</a>(&amp;self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="enum" href="https://doc.rust-lang.org/1.59.0/std/net/addr/enum.SocketAddr.html" title="enum std::net::addr::SocketAddr">SocketAddr</a>&gt;</h4></div></summary><div class="docblock"><p>Gets the local address of this socket.</p>
<p>Will fail on windows if called before <code>bind</code>.</p>
<h5 id="examples-6" class="section-header"><a href="#examples-6">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="macro">assert_eq!</span>(<span class="ident">socket</span>.<span class="ident">local_addr</span>().<span class="ident">unwrap</span>().<span class="ident">to_string</span>(), <span class="string">&quot;127.0.0.1:8080&quot;</span>);
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.bind" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#455-457" title="goto source code">[src]</a></div><a href="#method.bind" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.bind" class="fnname">bind</a>(&amp;self, addr: <a class="enum" href="https://doc.rust-lang.org/1.59.0/std/net/addr/enum.SocketAddr.html" title="enum std::net::addr::SocketAddr">SocketAddr</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.unit.html">()</a>&gt;</h4></div></summary><div class="docblock"><p>Binds the socket to the given address.</p>
<p>This calls the <code>bind(2)</code> operating-system function. Behavior is
platform specific. Refer to the target platforms documentation for more
details.</p>
<h5 id="examples-7" class="section-header"><a href="#examples-7">Examples</a></h5>
<p>Bind a socket before listening.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.connect" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#491-519" title="goto source code">[src]</a></div><a href="#method.connect" class="anchor"></a><h4 class="code-header">pub async fn <a href="#method.connect" class="fnname">connect</a>(self, addr: <a class="enum" href="https://doc.rust-lang.org/1.59.0/std/net/addr/enum.SocketAddr.html" title="enum std::net::addr::SocketAddr">SocketAddr</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="struct" href="struct.TcpStream.html" title="struct tokio::net::TcpStream">TcpStream</a>&gt;</h4></div></summary><div class="docblock"><p>Establishes a TCP connection with a peer at the specified socket address.</p>
<p>The <code>TcpSocket</code> is consumed. Once the connection is established, a
connected <a href="struct.TcpStream.html"><code>TcpStream</code></a> is returned. If the connection fails, the
encountered error is returned.</p>
<p>This calls the <code>connect(2)</code> operating-system function. Behavior is
platform specific. Refer to the target platforms documentation for more
details.</p>
<h5 id="examples-8" class="section-header"><a href="#examples-8">Examples</a></h5>
<p>Connecting to a peer.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">stream</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">connect</span>(<span class="ident">addr</span>).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.listen" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#556-575" title="goto source code">[src]</a></div><a href="#method.listen" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.listen" class="fnname">listen</a>(self, backlog: <a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.u32.html">u32</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="struct" href="struct.TcpListener.html" title="struct tokio::net::TcpListener">TcpListener</a>&gt;</h4></div></summary><div class="docblock"><p>Converts the socket into a <code>TcpListener</code>.</p>
<p><code>backlog</code> defines the maximum number of pending connections are queued
by the operating system at any given time. Connection are removed from
the queue with <a href="struct.TcpListener.html#method.accept"><code>TcpListener::accept</code></a>. When the queue is full, the
operating-system will start rejecting connections.</p>
<p>This calls the <code>listen(2)</code> operating-system function, marking the socket
as a passive socket. Behavior is platform specific. Refer to the target
platforms documentation for more details.</p>
<h5 id="examples-9" class="section-header"><a href="#examples-9">Examples</a></h5>
<p>Create a <code>TcpListener</code>.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">std::io</span>;
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">addr</span> <span class="op">=</span> <span class="string">&quot;127.0.0.1:8080&quot;</span>.<span class="ident">parse</span>().<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::new_v4</span>()<span class="question-mark">?</span>;
<span class="ident">socket</span>.<span class="ident">bind</span>(<span class="ident">addr</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">listener</span> <span class="op">=</span> <span class="ident">socket</span>.<span class="ident">listen</span>(<span class="number">1024</span>)<span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.from_std_stream" class="method has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#601-617" title="goto source code">[src]</a></div><a href="#method.from_std_stream" class="anchor"></a><h4 class="code-header">pub fn <a href="#method.from_std_stream" class="fnname">from_std_stream</a>(std_stream: <a class="struct" href="https://doc.rust-lang.org/1.59.0/std/net/tcp/struct.TcpStream.html" title="struct std::net::tcp::TcpStream">TcpStream</a>) -&gt; <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h4></div></summary><div class="docblock"><p>Converts a <a href="https://doc.rust-lang.org/1.59.0/std/net/tcp/struct.TcpStream.html"><code>std::net::TcpStream</code></a> into a <code>TcpSocket</code>. The provided
socket must not have been connected prior to calling this function. This
function is typically used together with crates such as <a href="https://docs.rs/socket2/"><code>socket2</code></a> to
configure socket options that are not available on <code>TcpSocket</code>.</p>
<h5 id="examples-10" class="section-header"><a href="#examples-10">Examples</a></h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use</span> <span class="ident">tokio::net::TcpSocket</span>;
<span class="kw">use</span> <span class="ident">socket2</span>::{<span class="ident">Domain</span>, <span class="ident">Socket</span>, <span class="ident">Type</span>};
<span class="attribute">#[<span class="ident">tokio::main</span>]</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -&gt; <span class="ident">std::io::Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">socket2_socket</span> <span class="op">=</span> <span class="ident">Socket::new</span>(<span class="ident">Domain::IPV4</span>, <span class="ident">Type::STREAM</span>, <span class="prelude-val">None</span>)<span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">socket</span> <span class="op">=</span> <span class="ident">TcpSocket::from_std_stream</span>(<span class="ident">socket2_socket</span>.<span class="ident">into</span>());
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details></div></details><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-AsRawFd" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#637-641" title="goto source code">[src]</a></div><a href="#impl-AsRawFd" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.AsRawFd.html" title="trait std::os::fd::raw::AsRawFd">AsRawFd</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.as_raw_fd" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#638-640" title="goto source code">[src]</a></div><a href="#method.as_raw_fd" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.AsRawFd.html#tymethod.as_raw_fd" class="fnname">as_raw_fd</a>(&amp;self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/type.RawFd.html" title="type std::os::fd::raw::RawFd">RawFd</a></h4></div></summary><div class='docblock'><p>Extracts the raw file descriptor. <a href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.AsRawFd.html#tymethod.as_raw_fd">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-Debug" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#630-634" title="goto source code">[src]</a></div><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.fmt" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#631-633" title="goto source code">[src]</a></div><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.59.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, fmt: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.59.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></div></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.59.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-FromRawFd" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#644-655" title="goto source code">[src]</a></div><a href="#impl-FromRawFd" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.FromRawFd.html" title="trait std::os::fd::raw::FromRawFd">FromRawFd</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.from_raw_fd" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#651-654" title="goto source code">[src]</a></div><a href="#method.from_raw_fd" class="anchor"></a><h4 class="code-header">unsafe fn <a href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.FromRawFd.html#tymethod.from_raw_fd" class="fnname">from_raw_fd</a>(fd: <a class="type" href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/type.RawFd.html" title="type std::os::fd::raw::RawFd">RawFd</a>) -&gt; <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h4></div></summary><div class="docblock"><p>Converts a <code>RawFd</code> to a <code>TcpSocket</code>.</p>
<h5 id="notes" class="section-header"><a href="#notes">Notes</a></h5>
<p>The caller is responsible for ensuring that the socket is in
non-blocking mode.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-IntoRawFd" class="impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#658-662" title="goto source code">[src]</a></div><a href="#impl-IntoRawFd" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.IntoRawFd.html" title="trait std::os::fd::raw::IntoRawFd">IntoRawFd</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.into_raw_fd" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="../../src/tokio/net/tcp/socket.rs.html#659-661" title="goto source code">[src]</a></div><a href="#method.into_raw_fd" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.IntoRawFd.html#tymethod.into_raw_fd" class="fnname">into_raw_fd</a>(self) -&gt; <a class="type" href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/type.RawFd.html" title="type std::os::fd::raw::RawFd">RawFd</a></h4></div></summary><div class='docblock'><p>Consumes this object, returning the raw underlying file descriptor. <a href="https://doc.rust-lang.org/1.59.0/std/os/fd/raw/trait.IntoRawFd.html#tymethod.into_raw_fd">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><div id="impl-RefUnwindSafe" class="impl has-srclink"><div class="rightside"></div><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div><div id="impl-Send" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div><div id="impl-Sync" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div><div id="impl-Unpin" class="impl has-srclink"><div class="rightside"></div><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div><div id="impl-UnwindSafe" class="impl has-srclink"><div class="rightside"></div><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.TcpSocket.html" title="struct tokio::net::TcpSocket">TcpSocket</a></h3></div></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-Any" class="impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/any.rs.html#132-136" title="goto source code">[src]</a></div><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.59.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.type_id" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/any.rs.html#133" title="goto source code">[src]</a></div><a href="#method.type_id" class="anchor"></a><h4 class="code-header">pub fn <a href="https://doc.rust-lang.org/1.59.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.59.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></div></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.59.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-Borrow%3CT%3E" class="impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/borrow.rs.html#209-214" title="goto source code">[src]</a></div><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.59.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.borrow" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/borrow.rs.html#211" title="goto source code">[src]</a></div><a href="#method.borrow" class="anchor"></a><h4 class="code-header">pub fn <a href="https://doc.rust-lang.org/1.59.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.reference.html">&amp;</a>T</h4></div></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.59.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/borrow.rs.html#218-222" title="goto source code">[src]</a></div><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.59.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.borrow_mut" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/borrow.rs.html#219" title="goto source code">[src]</a></div><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">pub fn <a href="https://doc.rust-lang.org/1.59.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.59.0/std/primitive.reference.html">&amp;mut </a>T</h4></div></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.59.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-From%3CT%3E" class="impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#550-554" title="goto source code">[src]</a></div><a href="#impl-From%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.from" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#551" title="goto source code">[src]</a></div><a href="#method.from" class="anchor"></a><h4 class="code-header">pub fn <a href="https://doc.rust-lang.org/1.59.0/core/convert/trait.From.html#tymethod.from" class="fnname">from</a>(t: T) -&gt; T</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-Into%3CU%3E" class="impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#538-545" title="goto source code">[src]</a></div><a href="#impl-Into%3CU%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><div id="method.into" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#542" title="goto source code">[src]</a></div><a href="#method.into" class="anchor"></a><h4 class="code-header">pub fn <a href="https://doc.rust-lang.org/1.59.0/core/convert/trait.Into.html#tymethod.into" class="fnname">into</a>(self) -&gt; U</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-TryFrom%3CU%3E" class="impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#588-597" title="goto source code">[src]</a></div><a href="#impl-TryFrom%3CU%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><div id="associatedtype.Error-1" class="type trait-impl has-srclink"><a href="#associatedtype.Error-1" class="anchor"></a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.59.0/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></div></summary><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.try_from" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#594" title="goto source code">[src]</a></div><a href="#method.try_from" class="anchor"></a><h4 class="code-header">pub fn <a href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fnname">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.59.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><div id="impl-TryInto%3CU%3E" class="impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#574-583" title="goto source code">[src]</a></div><a href="#impl-TryInto%3CU%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;U: <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,&nbsp;</span></h3></div></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><div id="associatedtype.Error" class="type trait-impl has-srclink"><a href="#associatedtype.Error" class="anchor"></a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></div></summary><div class='docblock'><p>The type returned in the event of a conversion error.</p>
</div></details><details class="rustdoc-toggle method-toggle" open><summary><div id="method.try_into" class="method trait-impl has-srclink"><div class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.59.0/src/core/convert/mod.rs.html#580" title="goto source code">[src]</a></div><a href="#method.try_into" class="anchor"></a><h4 class="code-header">pub fn <a href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryInto.html#tymethod.try_into" class="fnname">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.59.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.59.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></div></summary><div class='docblock'><p>Performs the conversion.</p>
</div></details></div></details></div></section><section id="search" class="content hidden"></section></div></main><div id="rustdoc-vars" data-root-path="../../" data-current-crate="tokio" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.59.0 (9d1b2106e 2022-02-23)" ></div>
</body></html>