Skip to main content

Terminal

Struct Terminal 

Source
pub(crate) struct Terminal {
    path: TempFile,
    connected_rx: Receiver<OwnedFd>,
    resizer: TerminalResizer,
}
Expand description

The terminal of a process, which the runtime passes over a console socket.

Fields§

§path: TempFile

The socket the runtime connects to, removed with the terminal.

§connected_rx: Receiver<OwnedFd>§resizer: TerminalResizer

Implementations§

Source§

impl Terminal

Source

pub(crate) fn path(&self) -> &Path

The console socket the runtime connects to.

Source

pub(crate) fn resizer(&self) -> TerminalResizer

Resizes the terminal also while something else holds it, like the runtime call which waits for the connection.

Source

fn tty(&self) -> Option<Arc<TerminalFd>>

The terminal while it is connected and open.

Source§

impl Terminal

Source

pub(crate) fn new() -> Result<Self>

Setup a new terminal instance.

Source

pub(crate) async fn connect(&mut self) -> Result<TerminalIo>

Wait for the runtime to hand over the terminal, for the loops which read and write it, see ContainerIO::connect_terminal. A wait which gets dropped leaves the descriptor queued for the next one. The terminal gets the size requested before, see TerminalResizer::resize.

Source

pub(crate) fn eof_char(&self) -> u8

The end of file character of the terminal, ^D unless the process changed it.

Source

pub(crate) fn resize(&self, width: u16, height: u16) -> Result<()>

Resize the terminal width and height, see TerminalResizer::resize.

Source

async fn listen(listener: UnixListener, config: Config) -> Result<()>

Accept the connection of the runtime and receive the terminal from it. The runtime never connects or never sends the descriptor if it fails early. The terminal gets dropped then, which closes the channel, so do not keep the listener around forever.

Source

async fn accept(listener: UnixListener, config: Config) -> Result<()>

Source

async fn handle_fd_receive(stream: UnixStream, config: Config) -> Result<()>

Source

fn recv_fd(socket: BorrowedFd<'_>) -> Result<Option<OwnedFd>>

Receive the descriptor of the terminal. It gets close-on-exec right away, the runtimes which other threads spawn meanwhile would inherit the terminal of the container otherwise.

Trait Implementations§

Source§

impl Debug for Terminal

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self> ⓘ

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more