I'm running a DDS micro client (v 2.4.10) on a linux ARM system (compiled from source). It produces topic data on one second intervals, and I have a windows 7 system with the Connext Pro version 5.3.0 running the Admin Console that should be able to watch the data.
I am sometimes able to see the linux node's DDS presence and its data. Other times, discovery never seems to happen, and I don't see the linux node as it's application starts.
What can I do to debug this? I've tried adding a windows firewall exception for the admin console, and for ports 7400,7401, and 7410-7420 (and I still seem to get the socket errors below)
Sometimes it seems like restarting the admin console seems to help, or rebooting the linux node. However, it seems to be random, so I'm not sure what works and what doesn't.
The admin console provides the below warnings when it doesn't work - I'm not sure if they happen when it does work because it only works occasionally.
2018-03-12 16:07:40,690 : WARN : com.rti.tools.console.entitymodel.util.Log4jLoggerDevice.write(Log4jLoggerDevice.java:77) : - [D0000|ENABLE]NDDS_Transport_Shmem_is_segment_compatible:incompatible shared memory segment found.
Found segment of size 1115268. Needed 3145924.
2018-03-12 16:07:41,689 : WARN : com.rti.tools.console.entitymodel.util.Log4jLoggerDevice.write(Log4jLoggerDevice.java:77) : - [D0000|ENABLE]NDDS_Transport_UDPv4_Socket_bindWithIp:0X1CF4 in use
2018-03-12 16:07:41,690 : WARN : com.rti.tools.console.entitymodel.util.Log4jLoggerDevice.write(Log4jLoggerDevice.java:77) : - [D0000|ENABLE]NDDS_Transport_UDPv4_SocketFactory_create_receive_socket:invalid port 7412
2018-03-12 16:07:41,691 : WARN : com.rti.tools.console.entitymodel.util.Log4jLoggerDevice.write(Log4jLoggerDevice.java:77) : - [D0000|ENABLE]NDDS_Transport_UDP_create_recvresource_rrEA:!create socket
2018-03-12 16:07:41,691 : WARN : com.rti.tools.console.entitymodel.util.Log4jLoggerDevice.write(Log4jLoggerDevice.java:77) : - [D0000|ENABLE]NDDS_Transport_UDPv4_Socket_bindWithIp:0X1CF6 in use
2018-03-12 16:07:41,692 : WARN : com.rti.tools.console.entitymodel.util.Log4jLoggerDevice.write(Log4jLoggerDevice.java:77) : - [D0000|ENABLE]NDDS_Transport_UDPv4_SocketFactory_create_receive_socket:invalid port 7414
2018-03-12 16:07:41,692 : WARN : com.rti.tools.console.entitymodel.util.Log4jLoggerDevice.write(Log4jLoggerDevice.java:77) : - [D0000|ENABLE]NDDS_Transport_UDP_create_recvresource_rrEA:!create socket
Weirdly, the problem goes away if I move the publishing from a backlground thread in my micro application to a foreground thread.
After initializing the DDS data structures, I was creating a thread with std::thread(), and in that thread, I was doing the 1-second periodic writes. That is... the writes happen, but neither the RTI Admin Console nor my custom application can detect the writes or the DDS application.
If I call the thread function directly, I don't seem to have a problem. If I use std::thread to invoke the function, I have a problem.