public override void Close() { if (_framePtr == null) { return; } if (_framePtr.Ptr == IntPtr.Zero) { Dismiss(); return; } ZError error; try { while (-1 == zmq.msg_close(_framePtr)) { error = ZError.GetLastErr(); if (error == ZError.EINTR) { error = default(ZError); continue; } if (error == ZError.EFAULT) { // Ignore: Invalid message. break; } throw new ZException(error, "zmq_msg_close"); } } finally { // Go unallocating the HGlobal Dismiss(); } }
internal static DispoIntPtr CreateEmptyNative() { var msg = DispoIntPtr.Alloc(zmq.sizeof_zmq_msg_t); ZError error; while (-1 == zmq.msg_init(msg)) { error = ZError.GetLastErr(); if (error == ZError.EINTR) { error = default(ZError); continue; } msg.Dispose(); throw new ZException(error, "zmq_msg_init"); } return(msg); }
static bool SendMsg(ZSocket sock, ZMessage msg, out ZError error) { error = ZError.None; try { foreach (ZFrame frame in msg) { while (-1 == zmq.msg_send(frame.Ptr, sock.SocketPtr, (int)(/* ZSocketFlags.DontWait | */ ZSocketFlags.More))) { error = ZError.GetLastErr(); if (error == ZError.EINTR) { error = default(ZError); continue; } /* if (error == ZError.EAGAIN) * { * error = default(ZError); * Thread.Sleep(1); * * continue; * } */ return(false); } } } finally { msg.Dismiss(); } return(true); }
public void MoveZeroTo(ZFrame other) { // zmq.msg_copy(dest, src) ZError error; while (-1 == zmq.msg_move(other.framePtr, framePtr)) { error = ZError.GetLastErr(); if (error == ZError.EINTR) { error = default(ZError); continue; } if (error == ZError.EFAULT) { // Invalid message. } throw new ZException(error, "zmq_msg_move"); } // When move, msg_close this _framePtr Close(); }