private void Detached()
{
// Transient session self-destructs after peer disconnects.
if (!m_connect)
{
Terminate();
return;
}
// For delayed connect situations, terminate the pipe
// and reestablish later on
if (m_pipe != null && m_options.DelayAttachOnConnect
&& m_addr.Protocol != Address.PgmProtocol && m_addr.Protocol != Address.EpgmProtocol)
{
m_pipe.Hiccup();
m_pipe.Terminate(false);
m_terminatingPipes.Add(m_pipe);
m_pipe = null;
}
Reset();
// Reconnect.
if (m_options.ReconnectIvl != -1)
StartConnecting(true);
// For subscriber sockets we hiccup the inbound pipe, which will cause
// the socket object to resend all the subscriptions.
if (m_pipe != null && (m_options.SocketType == ZmqSocketType.Sub || m_options.SocketType == ZmqSocketType.Xsub))
m_pipe.Hiccup();
}