Skip to content

Publisher throws HostUnreachableException  #9

Description

@michael-markl

Hello.
For me, the publisher throws an Unhandled Exception (HostUnreachableException), if the subscriber looses its connection, althogh I'm using the TrySendXYZ variants.
This probably only occurs, if the publisher is also concurrently sending.

My code:

using System;
using NetMQ;
using NetMQ.Sockets;
using NetMQ.WebSockets;

namespace PresentationDealer
{
    static class Program
    {
        private static void Main(string[] args)
        {
            using (var subscriber = new SubscriberSocket()) // For receiving updates from presentation host
            using (var publisher = new WSPublisher()) // For publishing updates from presentation host to audience
            using (var router = new WSRouter()) // Handling on-demand requests for late-joining or crashing clients
            {
                subscriber.Bind("tcp://*:3000");
                subscriber.SubscribeToAnyTopic();
                publisher.Bind("ws://*:3001");
                router.Bind("ws://*:3002");
                
                byte step = 0;
                
                subscriber.ReceiveReady += (_, __) => {
                    if (!subscriber.TryReceiveFrameBytes(out var received)) return;
                    step = received[0];
                    Console.Out.WriteLine("Sending " + step + " to audience.");
                    publisher.TrySendFrame(new TimeSpan(10000), new[] {step});
                };
                router.ReceiveReady += (_, __) => {
                    NetMQMessage msg = null;
                    if (!router.TryReceiveMultipartMessage(new TimeSpan(10000), ref msg)) return;
                    var identity = msg.Pop().Buffer;
                    var request = msg.Pop().ConvertToString();
                    msg.Clear();
                    if (request == "Which slide are we on?")
                        router.TrySendMultipartBytes(new TimeSpan(10000), identity, new[] {step});
                    else {
                        if (!router.TrySendFrame(new TimeSpan(10000), identity, true)) return;
                        router.TrySendFrameEmpty(new TimeSpan(10000));
                    }
                };
                new NetMQPoller {subscriber, router}.Run(); // Polling both subscriber and router sockets.
            }
        }
    }
}

My error code:

Unhandled Exception:
NetMQ.HostUnreachableException: In Stream.XSend
  at NetMQ.Core.Patterns.Stream.XSend (NetMQ.Msg& msg) [0x00075] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.Core.SocketBase.TrySend (NetMQ.Msg& msg, System.TimeSpan timeout, System.Boolean more) [0x00032] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.NetMQSocket.TrySend (NetMQ.Msg& msg, System.TimeSpan timeout, System.Boolean more) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.Send (NetMQ.IOutgoingSocket socket, NetMQ.Msg& msg, System.Boolean more) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.SendFrame (NetMQ.IOutgoingSocket socket, System.Byte[] data, System.Int32 length, System.Boolean more) [0x00026] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.SendFrame (NetMQ.IOutgoingSocket socket, System.Byte[] data, System.Boolean more) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.SendMoreFrame (NetMQ.IOutgoingSocket socket, System.Byte[] data) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.WebSockets.BaseShimHandler.WriteOutgoing (System.Byte[] identity, System.Byte[] message, System.Boolean more) [0x00009] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.WebSockets.WSPublisher+PublisherShimHandler.OnOutgoingMessage (NetMQ.NetMQMessage message) [0x00058] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.WebSockets.BaseShimHandler.OnMessagePipeReady (System.Object sender, NetMQ.NetMQSocketEventArgs e) [0x0000e] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.NetMQSocket.InvokeEvents (System.Object sender, NetMQ.PollEvents events) [0x00027] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.NetMQPoller.Run () [0x00278] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.WebSockets.BaseShimHandler.Run (NetMQ.Sockets.PairSocket shim) [0x000cc] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.NetMQActor.RunShim () [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00014] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x0002b] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ThreadHelper.ThreadStart () [0x00008] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: NetMQ.HostUnreachableException: In Stream.XSend
  at NetMQ.Core.Patterns.Stream.XSend (NetMQ.Msg& msg) [0x00075] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.Core.SocketBase.TrySend (NetMQ.Msg& msg, System.TimeSpan timeout, System.Boolean more) [0x00032] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.NetMQSocket.TrySend (NetMQ.Msg& msg, System.TimeSpan timeout, System.Boolean more) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.Send (NetMQ.IOutgoingSocket socket, NetMQ.Msg& msg, System.Boolean more) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.SendFrame (NetMQ.IOutgoingSocket socket, System.Byte[] data, System.Int32 length, System.Boolean more) [0x00026] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.SendFrame (NetMQ.IOutgoingSocket socket, System.Byte[] data, System.Boolean more) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.OutgoingSocketExtensions.SendMoreFrame (NetMQ.IOutgoingSocket socket, System.Byte[] data) [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.WebSockets.BaseShimHandler.WriteOutgoing (System.Byte[] identity, System.Byte[] message, System.Boolean more) [0x00009] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.WebSockets.WSPublisher+PublisherShimHandler.OnOutgoingMessage (NetMQ.NetMQMessage message) [0x00058] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.WebSockets.BaseShimHandler.OnMessagePipeReady (System.Object sender, NetMQ.NetMQSocketEventArgs e) [0x0000e] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.NetMQSocket.InvokeEvents (System.Object sender, NetMQ.PollEvents events) [0x00027] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.NetMQPoller.Run () [0x00278] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at NetMQ.WebSockets.BaseShimHandler.Run (NetMQ.Sockets.PairSocket shim) [0x000cc] in <a4e7735a9e5648afae91d0596558a88d>:0 
  at NetMQ.NetMQActor.RunShim () [0x00000] in <cd775f2ee43b4afd8cc83c9f5ddee1f4>:0 
  at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00014] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x0002b] in <a17fa1457c5d44f2885ac746c1764ea5>:0 
  at System.Threading.ThreadHelper.ThreadStart () [0x00008] in <a17fa1457c5d44f2885ac746c1764ea5>:0 

Process finished with exit code 1.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions