From 0b03b30cccc67d517b05587614405d63d942b1bb Mon Sep 17 00:00:00 2001 From: walter Date: Mon, 3 Oct 2022 19:08:43 +0800 Subject: [PATCH] feat(transport): add `from_listener` for `TcpIncoming` (#1093) --- tonic/src/transport/server/incoming.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tonic/src/transport/server/incoming.rs b/tonic/src/transport/server/incoming.rs index 6288d5266..b71a655bc 100644 --- a/tonic/src/transport/server/incoming.rs +++ b/tonic/src/transport/server/incoming.rs @@ -12,7 +12,10 @@ use std::{ task::{Context, Poll}, time::Duration, }; -use tokio::io::{AsyncRead, AsyncWrite}; +use tokio::{ + io::{AsyncRead, AsyncWrite}, + net::TcpListener, +}; #[cfg(not(feature = "tls"))] pub(crate) fn tcp_incoming( @@ -172,6 +175,18 @@ impl TcpIncoming { inner.set_keepalive(keepalive); Ok(TcpIncoming { inner }) } + + /// Creates a new `TcpIncoming` from an existing `tokio::net::TcpListener`. + pub fn from_listener( + listener: TcpListener, + nodelay: bool, + keepalive: Option, + ) -> Result { + let mut inner = AddrIncoming::from_listener(listener)?; + inner.set_nodelay(nodelay); + inner.set_keepalive(keepalive); + Ok(TcpIncoming { inner }) + } } impl Stream for TcpIncoming {