|
10 | 10 | // found online at https://opensource.org/licenses/MIT.
|
11 | 11 | //
|
12 | 12 |
|
| 13 | +#include "nng/protocol/pubsub0/sub.h" |
13 | 14 | #include <nng/nng.h>
|
14 | 15 | #include <nuts.h>
|
15 | 16 |
|
@@ -91,6 +92,48 @@ test_sfd_accept(void)
|
91 | 92 | #endif
|
92 | 93 | }
|
93 | 94 |
|
| 95 | +void |
| 96 | +test_sfd_accept_multi(void) |
| 97 | +{ |
| 98 | +#ifdef NNG_HAVE_SOCKETPAIR |
| 99 | + nng_socket s1, s2, s3; |
| 100 | + nng_listener l1, l2, l3; |
| 101 | + int fds1[2]; |
| 102 | + int fds2[2]; |
| 103 | + |
| 104 | + NUTS_PASS(nng_socket_pair(fds1)); |
| 105 | + NUTS_PASS(nng_socket_pair(fds2)); |
| 106 | + NUTS_PASS(nng_pub0_open(&s1)); |
| 107 | + NUTS_PASS(nng_sub0_open(&s2)); |
| 108 | + NUTS_PASS(nng_sub0_open(&s3)); |
| 109 | + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); |
| 110 | + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); |
| 111 | + NUTS_PASS(nng_socket_set_ms(s3, NNG_OPT_RECVTIMEO, 1000)); |
| 112 | + NUTS_PASS(nng_sub0_socket_subscribe(s2, NULL, 0)); |
| 113 | + NUTS_PASS(nng_sub0_socket_subscribe(s3, NULL, 0)); |
| 114 | + |
| 115 | + NUTS_PASS(nng_listener_create(&l1, s1, "socket://")); |
| 116 | + NUTS_PASS(nng_listener_create(&l2, s2, "socket://")); |
| 117 | + NUTS_PASS(nng_listener_create(&l3, s3, "socket://")); |
| 118 | + NUTS_PASS(nng_listener_start(l1, 0)); |
| 119 | + NUTS_PASS(nng_listener_start(l2, 0)); |
| 120 | + NUTS_PASS(nng_listener_start(l3, 0)); |
| 121 | + NUTS_PASS(nng_listener_set_int(l1, NNG_OPT_SOCKET_FD, fds1[0])); |
| 122 | + NUTS_PASS(nng_listener_set_int(l2, NNG_OPT_SOCKET_FD, fds1[1])); |
| 123 | + NUTS_PASS(nng_listener_set_int(l1, NNG_OPT_SOCKET_FD, fds2[0])); |
| 124 | + NUTS_PASS(nng_listener_set_int(l3, NNG_OPT_SOCKET_FD, fds2[1])); |
| 125 | + nng_msleep(200); |
| 126 | + NUTS_SEND(s1, "ping"); |
| 127 | + NUTS_RECV(s2, "ping"); |
| 128 | + NUTS_RECV(s3, "ping"); |
| 129 | + NUTS_CLOSE(s1); |
| 130 | + NUTS_CLOSE(s2); |
| 131 | + NUTS_CLOSE(s3); |
| 132 | +#else |
| 133 | + NUTS_SKIP("no socketpair"); |
| 134 | +#endif |
| 135 | +} |
| 136 | + |
94 | 137 | void
|
95 | 138 | test_sfd_exchange(void)
|
96 | 139 | {
|
|
157 | 200 | test_sfd_recv_max(void)
|
158 | 201 | {
|
159 | 202 | #ifdef NNG_HAVE_SOCKETPAIR
|
160 |
| - char msg[256]; |
161 |
| - char buf[256]; |
| 203 | + char msg[256] = { 0 }; |
| 204 | + char buf[256] = { 0 }; |
162 | 205 | nng_socket s0;
|
163 | 206 | nng_socket s1;
|
164 | 207 | nng_listener l0;
|
@@ -526,6 +569,7 @@ NUTS_TESTS = {
|
526 | 569 | { "socket malformed address", test_sfd_malformed_address },
|
527 | 570 | { "socket listen", test_sfd_listen },
|
528 | 571 | { "socket accept", test_sfd_accept },
|
| 572 | + { "socket accept multi", test_sfd_accept_multi }, |
529 | 573 | { "socket exchange", test_sfd_exchange },
|
530 | 574 | { "socket exchange late", test_sfd_exchange_late },
|
531 | 575 | { "socket recv max", test_sfd_recv_max },
|
|
0 commit comments