Skip to content

Publisher throws HostUnreachableException  #9

@michael-markl

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.

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