-
Notifications
You must be signed in to change notification settings - Fork 26
Open
Description
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
Labels
No labels