summaryrefslogtreecommitdiff
path: root/src/zmq_listener.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2009-08-09 11:21:47 +0200
committerMartin Sustrik <sustrik@fastmq.commkdir>2009-08-09 11:21:47 +0200
commitbde396f1561fb5e57e6e413a40d904586e186d42 (patch)
treecbd7537c95bbc8ab8a09a17cec6533a268500264 /src/zmq_listener.cpp
parent5b5b513330e96e3e08d0c2c60d03044091976420 (diff)
fix to 3-thread synchronisation algorithm
Diffstat (limited to 'src/zmq_listener.cpp')
-rw-r--r--src/zmq_listener.cpp36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/zmq_listener.cpp b/src/zmq_listener.cpp
index 9787f7e..9c9bbe9 100644
--- a/src/zmq_listener.cpp
+++ b/src/zmq_listener.cpp
@@ -29,12 +29,46 @@ zmq::zmq_listener_t::zmq_listener_t (io_thread_t *parent_, object_t *owner_) :
zmq::zmq_listener_t::~zmq_listener_t ()
{
+ if (plugged_in)
+ rm_fd (handle);
+}
+
+int zmq::zmq_listener_t::set_address (const char *addr_)
+{
+ return tcp_listener.set_address (addr_);
}
void zmq::zmq_listener_t::process_plug ()
{
- // TODO: Testing code follows...
+ // Open the listening socket.
+ int rc = tcp_listener.open ();
+ zmq_assert (rc == 0);
+
+ // Start polling for incoming connections.
+ handle = add_fd (tcp_listener.get_fd (), this);
+ set_pollin (handle);
+
+ io_object_t::process_plug ();
+}
+
+void zmq::zmq_listener_t::in_event ()
+{
+ fd_t fd = tcp_listener.accept ();
+
+ // If connection was reset by the peer in the meantime, just ignore it.
+ // TODO: Handle specific errors like ENFILE/EMFILE etc.
+ if (fd == retired_fd)
+ return;
+
+ // TODO
+ zmq_assert (false);
+
+/*
object_t *engine = new zmq_engine_t (choose_io_thread (0), owner);
send_plug (engine);
send_own (owner, engine);
+*/
}
+
+
+