@@ -246,6 +246,46 @@ void reconnect_stop_on_handshake_failed ()
246
246
}
247
247
#endif
248
248
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
+
249
289
void setUp ()
250
290
{
251
291
setup_test_context ();
@@ -267,6 +307,9 @@ int main (void)
267
307
#ifdef ZMQ_BUILD_DRAFT_API
268
308
RUN_TEST (reconnect_stop_on_refused);
269
309
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);
270
313
#endif
271
314
return UNITY_END ();
272
315
}
0 commit comments