private NetMQSocket connect_raw()
{
if (_socket != null)
{
Log.Debug("[TcpGateway] Disposing old socket. Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
_socket.ReceiveReady -= socket_ReceiveReady;
_socket.Options.Linger = TimeSpan.FromSeconds(0);
_socket.Dispose();
_socket = null;
}
var spinner = new SpinWait();
while (true)
{
Log.Info("[TcpGateway] Creating new socket. Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
var socket = _ctx.CreateRouterSocket();
socket.ReceiveReady += socket_ReceiveReady;
try
{
socket.Bind(_endpoint);
Log.Debug("[TcpGateway] Socket connected at {0}. Thread Id: {1}", _endpoint, Thread.CurrentThread.ManagedThreadId);
return socket;
}
catch (NetMQException e)
{
Log.Warn("[TcpGateway] Error binding to socket at {0}. Retrying in 500ms... Thread ID: {1}", e, _endpoint, Thread.CurrentThread.ManagedThreadId);
socket.Options.Linger = TimeSpan.FromSeconds(0);
socket.Dispose();
Thread.Sleep(500);
spinner.SpinOnce();
}
}
}