pub struct GitListener {
pub asked: SocketAddr,
pub bound: SocketAddr,
}Expand description
Where the git listener actually bound.
A pair of addresses and not a flag, because the defect this closes WAS a
flag. is_ready is a boot latch: it starts true and is closed only
by a boot task that opens a window, so Bootstrap.Status.serving_git has
always answered “no boot task is still running” — a question about this
process’s start-up, never about a socket. MEASURED 2026-09-20 on the live
estate: 10.13.8.101 answered git serving with a build, a role and an
applied sequence, while every git-receive-pack to
ssh://git@10.13.8.101:2222 failed Connection refused (os error 111) —
an RST, so nothing was bound there at all. A health line that cannot be
false is not a health line.
asked is what --ssh-bind named; bound is what local_addr() returned.
They differ on exactly one path today, and it is the one that matters:
serve::start binds a twin’s listener to 127.0.0.1:0 whatever was
asked for, because a twin serves no git to anyone.
Carried per CoreControlPlane rather than in a static: two servers in one
test process are two listeners, and a process-wide slot would let the
second one answer for the first.
Fields§
§asked: SocketAddrThe address --ssh-bind named.
bound: SocketAddrThe address the listener actually took.
Implementations§
Source§impl GitListener
impl GitListener
Sourcepub fn serves_git(&self) -> bool
pub fn serves_git(&self) -> bool
Is git reachable at the door that was asked for?
The addresses, not a flag: the listener serves git when the socket it
took is the socket that was named. A port of 0 in asked is a
deliberate “any port” — every integration test in this workspace binds
that way — so only the interface is compared there.
Trait Implementations§
Source§impl Clone for GitListener
impl Clone for GitListener
impl Copy for GitListener
Source§impl Debug for GitListener
impl Debug for GitListener
impl Eq for GitListener
Source§impl PartialEq for GitListener
impl PartialEq for GitListener
impl StructuralPartialEq for GitListener
Auto Trait Implementations§
impl Freeze for GitListener
impl RefUnwindSafe for GitListener
impl Send for GitListener
impl Sync for GitListener
impl Unpin for GitListener
impl UnsafeUnpin for GitListener
impl UnwindSafe for GitListener
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request