Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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();
        }