1 /* 2 Copyright (c) 2007-2011 iMatix Corporation 3 Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file 4 5 6 This file is part of 0MQ. 7 8 0MQ is free software; you can redistribute it and/or modify it under 9 the terms of the GNU Lesser General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 0MQ is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU Lesser General Public License for more details. 17 18 You should have received a copy of the GNU Lesser General Public License 19 along with this program. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 22 #ifndef __ZMQ_XREQ_HPP_INCLUDED__ 23 #define __ZMQ_XREQ_HPP_INCLUDED__ 24 25 #include "socket_base.hpp" 26 #include "fq.hpp" 27 #include "lb.hpp" 28 29 namespace zmq 30 { 31 32 class xreq_t : public socket_base_t 33 { 34 public: 35 36 xreq_t (class ctx_t *parent_, uint32_t tid_); 37 ~xreq_t (); 38 39 protected: 40 41 // Overloads of functions from socket_base_t. 42 void xattach_pipes (class reader_t *inpipe_, class writer_t *outpipe_, 43 const blob_t &peer_identity_); 44 int xsend (zmq_msg_t *msg_, int flags_); 45 int xrecv (zmq_msg_t *msg_, int flags_); 46 bool xhas_in (); 47 bool xhas_out (); 48 49 private: 50 51 // Hook into the termination process. 52 void process_term (int linger_); 53 54 // Messages are fair-queued from inbound pipes. And load-balanced to 55 // the outbound pipes. 56 fq_t fq; 57 lb_t lb; 58 59 xreq_t (const xreq_t&); 60 const xreq_t &operator = (const xreq_t&); 61 }; 62 63 } 64 65 #endif 66