# encoding: utf-8 class ZMQ::Socket::Rep # == ZMQ::Socket::Rep # # A socket of type ZMQ::Socket::Rep is used by a service to receive requests from and send replies to a client. This socket type # allows only an alternating sequence of ZMQ::Socket#recv and subsequent ZMQ::Socket#send calls. Each request received is # fair-queued from among all clients, and each reply sent is routed to the client that issued the last request. If the # original requester doesn't exist any more the reply is silently discarded. # # When a ZMQ::Socket::Rep socket enters an exceptional state due to having reached the high water mark for a client, then any replies # sent to the client in question shall be dropped until the exceptional state ends. # # === Summary of ZMQ::Socket#rep characteristics # # [Compatible peer sockets] ZMQ::Socket::Rep # [Direction] Bidirectional # [Send/receive pattern] Receive, Send, Receive, Send, … # [Incoming routing strategy] Fair-queued # [Outgoing routing strategy] Last peer # [ZMQ::Socket#hwm option action] Drop TYPE_STR = "REP" def type ZMQ::REP end unsupported_api :sendm handle_fsm_errors "REP sockets allows only an alternating sequence of receive and subsequent send calls.", :send, :send_frame, :send_message, :recv, :recv_nonblock, :recv_frame, :recv_frame_nonblock, :recv_message def send_frame(frame, flags = 0) raise ZMQ::Error, "cannot send multiple frames on REP sockets" if (flags & ZMQ::Frame::MORE) == ZMQ::Frame::MORE super end end