pub enum H2ForceDisconnectTarget {
Client,
Server {
peer_gone: bool,
},
}Expand description
The half of ConnectionH2::force_disconnect that still owes the socket a
question, parked until the shell can ask it.
The fourth member of the poll/handle family, and the only one that cannot
be returned by the function that raises it. H2FinalizeTarget,
H2ControlFlushTarget and H2WritableStateTarget are answers a core
step hands straight back to its caller; this one is raised at seventeen
sites, seven of them inside ConnectionH2::handle_read, whose pub
signature returns MuxResult and does not change. A target that cannot
ride the return value has to be parked on the connection instead, which is
why this is a field rather than a return type. The pairing is otherwise
identical: ConnectionH2::poll_force_disconnect takes it, the shell
reads SocketHandler::socket_wants_write,
and ConnectionH2::force_disconnect_after_query receives that answer as
its own parameter.
Both variants carry everything the settlement needs that the socket cannot
supply, so nothing is re-derived after the fact. peer_gone in particular
is computed at the raising site and carried: it reads stream_table and
zero.storage, and ConnectionH2::remove_dead_stream runs between the
raise and the settlement on the ConnectionH2::reset_stream paths, so a
value re-read at settlement time would not be the one the decision was
entitled to.
Position::Client is a variant rather than a settled answer because its
arm’s debug! renders wants_write= too, and that line must report what
the socket says rather than a literal — see ConnectionH2::peer_address’s
neighbouring note on the same rule.
Variants§
Client
A Position::Client connection. The settlement logs and answers
MuxResult::Continue; the backend status and the HUP readiness
event were already written at the raising site, because neither needs
the socket.
Server
A Position::Server connection, with peer_gone_after_final_goaway()
as the raising site read it. The settlement runs
h2_close::force_disconnect_action on the pair and performs the
ReArmAndContinue readiness write when that is the answer.
Trait Implementations§
Source§impl Clone for H2ForceDisconnectTarget
impl Clone for H2ForceDisconnectTarget
impl Copy for H2ForceDisconnectTarget
Source§impl Debug for H2ForceDisconnectTarget
impl Debug for H2ForceDisconnectTarget
impl Eq for H2ForceDisconnectTarget
Source§impl PartialEq for H2ForceDisconnectTarget
impl PartialEq for H2ForceDisconnectTarget
impl StructuralPartialEq for H2ForceDisconnectTarget
Auto Trait Implementations§
impl Freeze for H2ForceDisconnectTarget
impl RefUnwindSafe for H2ForceDisconnectTarget
impl Send for H2ForceDisconnectTarget
impl Sync for H2ForceDisconnectTarget
impl Unpin for H2ForceDisconnectTarget
impl UnsafeUnpin for H2ForceDisconnectTarget
impl UnwindSafe for H2ForceDisconnectTarget
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.