@@ -246,6 +246,46 @@ void reconnect_stop_on_handshake_failed ()
246246}
247247#endif
248248
249+ #if defined(ZMQ_BUILD_DRAFT_API) && defined(ZMQ_HAVE_IPC)
250+ // test stopping reconnect after disconnect
251+ void reconnect_stop_after_disconnect ()
252+ {
253+ // Setup sub socket
254+ void *sub = test_context_socket (ZMQ_SUB);
255+ // Monitor all events on sub
256+ TEST_ASSERT_SUCCESS_ERRNO (
257+ zmq_socket_monitor (sub, " inproc://monitor-sub" , ZMQ_EVENT_ALL));
258+ // Create socket for collecting monitor events
259+ void *sub_mon = test_context_socket (ZMQ_PAIR);
260+ // Connect so they'll get events
261+ TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (sub_mon, " inproc://monitor-sub" ));
262+ // Set option to stop reconnecting after disconnect
263+ int stopReconnectAfterDisconnect = ZMQ_RECONNECT_STOP_AFTER_DISCONNECT;
264+ TEST_ASSERT_SUCCESS_ERRNO (
265+ zmq_setsockopt (sub, ZMQ_RECONNECT_STOP, &stopReconnectAfterDisconnect,
266+ sizeof (stopReconnectAfterDisconnect)));
267+
268+ // Connect to a dummy that cannot be connected
269+ TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (sub, " ipc://@dummy" ));
270+
271+ // Confirm that connect failed and reconnect
272+ expect_monitor_event (sub_mon, ZMQ_EVENT_CLOSED);
273+ expect_monitor_event (sub_mon, ZMQ_EVENT_CONNECT_RETRIED);
274+
275+ // Disconnect the sub socket
276+ TEST_ASSERT_SUCCESS_ERRNO (zmq_disconnect (sub, " ipc://@dummy" ));
277+
278+ // Confirm that connect failed and will not reconnect
279+ expect_monitor_event (sub_mon, ZMQ_EVENT_CLOSED);
280+
281+ // Close sub
282+ test_context_socket_close_zero_linger (sub);
283+
284+ // Close monitor
285+ test_context_socket_close_zero_linger (sub_mon);
286+ }
287+ #endif
288+
249289void setUp ()
250290{
251291 setup_test_context ();
@@ -267,6 +307,9 @@ int main (void)
267307#ifdef ZMQ_BUILD_DRAFT_API
268308 RUN_TEST (reconnect_stop_on_refused);
269309 RUN_TEST (reconnect_stop_on_handshake_failed);
310+ #endif
311+ #if defined(ZMQ_BUILD_DRAFT_API) && defined(ZMQ_HAVE_IPC)
312+ RUN_TEST (reconnect_stop_after_disconnect);
270313#endif
271314 return UNITY_END ();
272315}
0 commit comments