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; } while (ZmqNative.close(_handle) == -1) { if (ZmqUtil.WasInterrupted()) { continue; } 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; }