diff --git a/.gitignore b/.gitignore
index 4a089fac..3e8c1652 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,7 @@ autom4te.cache
.*~
tools/curve_keygen.o
tools/curve_keygen
+tests/test_stream_empty
tests/test_issue_566
tests/test_ctx_destroy
tests/test_term_endpoint
diff --git a/src/stream.cpp b/src/stream.cpp
index 0b495a58..987a2679 100644
--- a/src/stream.cpp
+++ b/src/stream.cpp
@@ -142,6 +142,8 @@ int zmq::stream_t::xsend (msg_t *msg_)
current_out->terminate (false);
int rc = msg_->close ();
errno_assert (rc == 0);
+ rc = msg_->init ();
+ errno_assert (rc == 0);
current_out = NULL;
return 0;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 696c2eea..170696b5 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -20,9 +20,9 @@ noinst_PROGRAMS = test_system \
test_linger \
test_monitor \
test_router_mandatory \
- test_router_raw_empty \
test_probe_router \
test_stream \
+ test_stream_empty \
test_disconnect_inproc \
test_ctx_options \
test_ctx_destroy \
diff --git a/tests/test_router_raw_empty.cpp b/tests/test_router_raw_empty.cpp
deleted file mode 100644
index 83dc10cd..00000000
--- a/tests/test_router_raw_empty.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file
-
- This file is part of 0MQ.
-
- 0MQ is free software; you can redistribute it and/or modify it under
- the terms of the GNU Lesser 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
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with this program. If not, see .
-*/
-
-#include "testutil.hpp"
-
-int main (void) {
- setup_test_environment();
- void *ctx = zmq_ctx_new();
- assert(ctx);
-
- void *router = zmq_socket(ctx, ZMQ_ROUTER);
- assert(router);
- void *dealer = zmq_socket(ctx, ZMQ_DEALER);
- assert(dealer);
-
- int one=1;
- int rc = zmq_setsockopt(router, ZMQ_ROUTER_RAW, &one, sizeof(int));
- assert(rc >= 0);
- rc = zmq_setsockopt(router, ZMQ_ROUTER_MANDATORY, &one, sizeof(int));
- assert(rc >= 0);
-
- rc = zmq_bind(router, "tcp://127.0.0.1:5555");
- rc = zmq_connect(dealer, "tcp://127.0.0.1:5555");
- zmq_send(dealer, "", 0, 0);
-
-
- zmq_msg_t ident, empty;
- zmq_msg_init(&ident);
- rc = zmq_msg_recv(&ident, router, 0);
- assert(rc >= 0);
- rc = zmq_msg_init_data(&empty, (void*)"", 0, NULL, NULL);
- assert(rc >= 0);
-
- rc = zmq_msg_send(&ident, router, ZMQ_SNDMORE);
- assert(rc >= 0);
- rc = zmq_msg_close(&ident);
- assert(rc >= 0);
-
- rc = zmq_msg_send(&empty, router, 0);
- assert(rc >= 0);
-
- // This close used to fail with Bad Address
- rc = zmq_msg_close(&empty);
- assert(rc >= 0);
-
- close_zero_linger(dealer);
- close_zero_linger(router);
- zmq_ctx_term(ctx);
-}
diff --git a/tests/test_stream_empty.cpp b/tests/test_stream_empty.cpp
new file mode 100644
index 00000000..a4b875e3
--- /dev/null
+++ b/tests/test_stream_empty.cpp
@@ -0,0 +1,60 @@
+/*
+ Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file
+
+ This file is part of 0MQ.
+
+ 0MQ is free software; you can redistribute it and/or modify it under
+ the terms of the GNU Lesser 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
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see .
+*/
+
+#include "testutil.hpp"
+
+int main (void) {
+ setup_test_environment ();
+ void *ctx = zmq_ctx_new ();
+ assert (ctx);
+
+ void *stream = zmq_socket (ctx, ZMQ_STREAM);
+ assert (stream);
+ void *dealer = zmq_socket (ctx, ZMQ_DEALER);
+ assert (dealer);
+
+ int rc = zmq_bind (stream, "tcp://127.0.0.1:5555");
+ assert (rc >= 0);
+ rc = zmq_connect (dealer, "tcp://127.0.0.1:5555");
+ assert (rc >= 0);
+ zmq_send (dealer, "", 0, 0);
+
+ zmq_msg_t ident, empty;
+ zmq_msg_init (&ident);
+ rc = zmq_msg_recv (&ident, stream, 0);
+ assert (rc >= 0);
+ rc = zmq_msg_init_data (&empty, (void *) "", 0, NULL, NULL);
+ assert (rc >= 0);
+
+ rc = zmq_msg_send (&ident, stream, ZMQ_SNDMORE);
+ assert (rc >= 0);
+ rc = zmq_msg_close (&ident);
+ assert (rc >= 0);
+
+ rc = zmq_msg_send (&empty, stream, 0);
+ assert (rc >= 0);
+
+ // This close used to fail with Bad Address
+ rc = zmq_msg_close (&empty);
+ assert (rc >= 0);
+
+ close_zero_linger (dealer);
+ close_zero_linger (stream);
+ zmq_ctx_term (ctx);
+}