public static void Close(ZmqMessage *message) { if (ZmqNative.msg_close(message) == -1) { ZmqUtil.ThrowLastError("Could not close ZMQ message"); } }
public static void Init(ZmqMessage *message) { if (ZmqNative.msg_init(message) == -1) { ZmqUtil.ThrowLastError("Could not initialize ZMQ message"); } }
public void Connect(string endpoint) { if (ZmqNative.connect(_handle, endpoint) == -1) { ZmqUtil.ThrowLastError($"Unable to connect ZMQ socket to {endpoint}"); } }
public bool TrySend(byte[] buffer, int offset, int count, out ZmqErrorCode error) { if ((uint)offset > (uint)buffer.Length || (uint)count > (uint)(buffer.Length - offset)) { ZmqUtil.ThrowArgOutOfRange(); } if (count == 0) { error = ZmqErrorCode.None; return(false); } fixed(byte *pBuf = &buffer[0]) { while (true) { var length = ZmqNative.send(_handle, pBuf + offset, (IntPtr)count, 0); if (length >= 0) { error = ZmqErrorCode.None; return(true); } error = ZmqNative.errno(); if (error == ZmqErrorCode.EINTR) { continue; } return(false); } } }
public void Bind(string endpoint) { if (ZmqNative.bind(_handle, endpoint) == -1) { ZmqUtil.ThrowLastError($"Unable to bind ZMQ socket to {endpoint}"); } }
public ZmqContext() { Handle = ZmqNative.ctx_new(); if (Handle == IntPtr.Zero) { ZmqUtil.ThrowLastError("Could not create ZMQ context"); } }
public ZmqSocket(ZmqContext context, ZmqSocketType type) { _context = context; _handle = ZmqNative.socket(_context.Handle, (int)type); if (_handle == IntPtr.Zero) { ZmqUtil.ThrowLastError($"Could not create ZMQ {type} socket"); } }
public void SetOption(ZmqSocketOption option, int value) { while (ZmqNative.setsockopt(_handle, (int)option, &value, (IntPtr)sizeof(int)) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } ZmqUtil.ThrowLastError($"Unable to set ZMQ socket option {option} to {value}"); } }
public static void Init(ZmqMessage *message) { while (ZmqNative.msg_init(message) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } ZmqUtil.ThrowLastError("Could not initialize ZMQ message"); } }
public void Connect(string endpoint) { while (ZmqNative.connect(_handle, endpoint) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } ZmqUtil.ThrowLastError($"Unable to connect ZMQ socket to {endpoint}"); } }
public bool TryDisconnect(string endpoint) { while (ZmqNative.disconnect(_handle, endpoint) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } return(false); } return(true); }
public void SetOption(ZmqSocketOption option, byte[] value) { fixed(byte *valuePtr = value) { while (ZmqNative.setsockopt(_handle, (int)option, valuePtr, (IntPtr)(value?.Length ?? 0)) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } ZmqUtil.ThrowLastError($"Unable to set ZMQ socket option {option}"); } } }
private void Close(bool canThrow) { if (_handle == IntPtr.Zero) { return; } if (ZmqNative.close(_handle) == -1) { if (canThrow) { ZmqUtil.ThrowLastError("Could not close ZMQ socket"); } } _handle = IntPtr.Zero; }
public string GetOptionString(ZmqSocketOption option) { const int bufSize = 256; var buf = stackalloc byte[bufSize]; var size = (IntPtr)bufSize; while (ZmqNative.getsockopt(_handle, (int)option, buf, &size) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } ZmqUtil.ThrowLastError($"Unable to get ZMQ socket option {option}"); } if ((long)size <= 1) { return(string.Empty); } return(Marshal.PtrToStringAnsi((IntPtr)buf, (int)size - 1)); }
private void Terminate(bool canThrow) { if (Handle == IntPtr.Zero) { return; } while (ZmqNative.ctx_term(Handle) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } if (canThrow) { ZmqUtil.ThrowLastError("Could not terminate ZMQ context"); } break; } Handle = IntPtr.Zero; }