summaryrefslogtreecommitdiff
path: root/src/socket_base.hpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2009-08-08 16:01:58 +0200
committerMartin Sustrik <sustrik@fastmq.commkdir>2009-08-08 16:01:58 +0200
commita8b410e66c3c75809c8e9c01dd3e35c579f02347 (patch)
tree7af63906dce0216f86e5ff0767efaddfd6492cfd /src/socket_base.hpp
parent0b5cc026fbe7ccc6de66907be29471562a2d344d (diff)
lockfree interaction patter for 3 theads implemented
Diffstat (limited to 'src/socket_base.hpp')
-rw-r--r--src/socket_base.hpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/socket_base.hpp b/src/socket_base.hpp
new file mode 100644
index 0000000..633f003
--- /dev/null
+++ b/src/socket_base.hpp
@@ -0,0 +1,72 @@
+/*
+ Copyright (c) 2007-2009 FastMQ Inc.
+
+ This file is part of 0MQ.
+
+ 0MQ is free software; you can redistribute it and/or modify it under
+ the terms of the Lesser GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ 0MQ is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ Lesser GNU General Public License for more details.
+
+ You should have received a copy of the Lesser GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __ZMQ_SOCKET_BASE_HPP_INCLUDED__
+#define __ZMQ_SOCKET_BASE_HPP_INCLUDED__
+
+#include <vector>
+
+#include "i_api.hpp"
+#include "object.hpp"
+
+namespace zmq
+{
+
+ class socket_base_t : public object_t, public i_api
+ {
+ public:
+
+ socket_base_t (class app_thread_t *parent_);
+ ~socket_base_t ();
+
+ // i_api interface implementation.
+ int bind (const char *addr_, struct zmq_opts *opts_);
+ int connect (const char *addr_, struct zmq_opts *opts_);
+ int subscribe (const char *criteria_);
+ int send (struct zmq_msg *msg_, int flags_);
+ int flush ();
+ int recv (struct zmq_msg *msg_, int flags_);
+ int close ();
+
+ private:
+
+ // Handlers for incoming commands.
+ void process_own (object_t *object_);
+ void process_term_req (object_t *object_);
+ void process_term_ack ();
+
+ // List of all I/O objects owned by this socket. The socket is
+ // responsible for deallocating them before it quits.
+ typedef std::vector <object_t*> io_objects_t;
+ io_objects_t io_objects;
+
+ // Number of I/O objects that were already asked to terminate
+ // but haven't acknowledged it yet.
+ int pending_term_acks;
+
+ // Application thread the socket lives in.
+ class app_thread_t *app_thread;
+
+ socket_base_t (const socket_base_t&);
+ void operator = (const socket_base_t&);
+ };
+
+}
+
+#endif