コード例 #1
0
        static bool SendMsg(ZSocket sock, ZMessage msg, out ZError error)
        {
            error = ZError.None;

            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);
                }
            }

            msg.Dismiss();
            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Forwards requests from the frontend socket to the backend socket.
        /// </summary>
        protected override bool FrontendHandler(ZSocket sock, out ZMessage message, out ZError error)
        {
            error   = default(ZError);
            message = null;

            // receiving scope
            // STREAM: get 2 frames, identity and body
            ZMessage incoming = null;
            // IPAddress address = null;
            string address;

            if (!ReceiveMsg(sock, ref incoming, out address, out error))
            {
                return(false);
            }

            // sending scope
            // DEALER: forward
            using (incoming)
            {
                if (incoming[1].Length == 0)
                {
                    return(true);                    // Ignore the Empty one
                }

                // Prepend empty delimiter between Identity frame and Data frame
                incoming.Insert(1, new ZFrame());

                // Prepend Peer-Address
                incoming.Insert(2, new ZFrame(address));

                try
                {
                    if (!BackendSocket.Send(incoming, /* ZSocketFlags.DontWait, */ out error))
                    {
                        return(false);
                    }
                }
                finally {
                    incoming.Dismiss();
                }
            }

            return(true);
        }
コード例 #3
0
        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;
        }