# Error from roscpp: Unable to modify FD epoll: No such file or directory

I am working with a real-time Orocos controller using rtt-ros-integration 2.9 on ROS Kinetic Ubuntu 16.04. Using the Orocos deployer I am able to load and start the controller component, but then I will launch another launch file that starts several nodes, and I will occasionally (happens often but not everytime) see the error in the title. I tracked it down in the logs and found

1529463944.138263450 ERROR [/tmp/binarydeb/ros-kinetic-roscpp-1.12.13/src/libros/io.cpp:154(set_events_on_socket) [topics: /rosout, /lbr4/joint_states, /lbr4/pose, /lbr4/twist, /lbr4/wrench, /diagnostics_agg] Unable to modify FD epoll: No such file or directory


And I see that error 4 times in a row usually, possibly because there are 4 of my topics involved (the /lbr4 ones). Those topics are being streamed from an Orocos component through the rtt-ros-integration. The log tells me exactly where in the roscpp source the error is being thrown, but I can't for the life of me figure out what the root cause is. I also see similar errors when I exit the Orocos deployer, saying it is unable to remove FD to epoll.

Possibly relevant is that I have two different computers involved, one is only running the Orocos controller and hardware drivers, while the other computer is the ROS master and runs roscore and the secondary launch file I launch. So my process is

1. Start roscore on Machine 1.
2. Start Orocos deployer and load and start controller on Machine 2 (who's ROS_MASTER_URI is set to Machine 1 and is connected through a direct tether).
3. Launch other nodes on Machine 1 (this is where I see ROS epoll error on Machine 2).

Any help on this would be greatly appreciated, I don't have much knowledge about file descriptors and epoll so I don't know how to start debugging this. Thanks!

edit retag close merge delete

Sort by » oldest newest most voted

I did resolve the issue, it was mistake on my part in generating the RTT typekit for a custom message definition. I had originally stored the message definition in one package, and called ros_generate_rtt_typekit in a different package. I had since copied the message definition to the same package I was calling ros_generate_rtt_typekit in to get rid of that external dependency, but I think that just confused everything so that anytime I did ros.import(my_package) it tried to also import the RTT message type from the other package. Why this causes the exact behavior I was seeing, I'm not sure, and I'm not sure this solution will help anyone else, but the fix for me in the end was to get rid of any reference to the dependency in the external package, do ros_generate_rtt_typekit in my_package where the message is defined, and do a catkin clean before building again.

more