Manages a set of sockets being polled through the poll() function call. More...
#include <poll_set.h>
Classes | |
struct | SocketInfo |
Public Types | |
typedef boost::function< void(int)> | SocketUpdateFunc |
Public Member Functions | |
bool | addEvents (int sock, int events) |
Add events to be polled on a socket. More... | |
bool | addSocket (int sock, const SocketUpdateFunc &update_func, const TransportPtr &transport=TransportPtr()) |
Add a socket. More... | |
bool | delEvents (int sock, int events) |
Delete events to be polled on a socket. More... | |
bool | delSocket (int sock) |
Delete a socket. More... | |
PollSet () | |
void | signal () |
Signal our poll() call to finish if it's blocked waiting (see the poll_timeout option for update()). More... | |
void | update (int poll_timeout) |
Process all socket events. More... | |
~PollSet () | |
Private Types | |
typedef std::map< int, SocketInfo > | M_SocketInfo |
typedef std::vector< int > | V_int |
Private Member Functions | |
void | createNativePollset () |
Creates the native pollset for our sockets, if any have changed. More... | |
void | onLocalPipeEvents (int events) |
Called when events have been triggered on our signal pipe. More... | |
Private Attributes | |
int | epfd_ |
V_int | just_deleted_ |
boost::mutex | just_deleted_mutex_ |
boost::mutex | signal_mutex_ |
signal_fd_t | signal_pipe_ [2] |
M_SocketInfo | socket_info_ |
boost::mutex | socket_info_mutex_ |
bool | sockets_changed_ |
std::vector< socket_pollfd > | ufds_ |
Manages a set of sockets being polled through the poll() function call.
PollSet provides thread-safe ways of adding and deleting sockets, as well as adding and deleting events.
Definition at line 57 of file poll_set.h.
|
private |
Definition at line 137 of file poll_set.h.
typedef boost::function<void(int)> ros::PollSet::SocketUpdateFunc |
Definition at line 63 of file poll_set.h.
|
private |
Definition at line 143 of file poll_set.h.
ros::PollSet::PollSet | ( | ) |
Definition at line 49 of file poll_set.cpp.
ros::PollSet::~PollSet | ( | ) |
Definition at line 60 of file poll_set.cpp.
bool ros::PollSet::addEvents | ( | int | sock, |
int | events | ||
) |
Add events to be polled on a socket.
addEvents() may be called from any thread.
sock | The socket to add events to |
events | The events to add |
Definition at line 126 of file poll_set.cpp.
bool ros::PollSet::addSocket | ( | int | sock, |
const SocketUpdateFunc & | update_func, | ||
const TransportPtr & | transport = TransportPtr() |
||
) |
Add a socket.
addSocket() may be called from any thread.
sock | The socket to add |
update_func | The function to call when a socket has events |
transport | The (optional) transport associated with this socket. Mainly used to prevent the transport from being deleted while we're calling the update function |
Definition at line 66 of file poll_set.cpp.
|
private |
Creates the native pollset for our sockets, if any have changed.
Definition at line 266 of file poll_set.cpp.
bool ros::PollSet::delEvents | ( | int | sock, |
int | events | ||
) |
Delete events to be polled on a socket.
delEvents() may be called from any thread.
sock | The socket to delete events from |
events | The events to delete |
Definition at line 148 of file poll_set.cpp.
bool ros::PollSet::delSocket | ( | int | sock | ) |
Delete a socket.
delSocket() may be called from any thread.
sock | The socket to delete |
Definition at line 94 of file poll_set.cpp.
|
private |
Called when events have been triggered on our signal pipe.
Definition at line 290 of file poll_set.cpp.
void ros::PollSet::signal | ( | ) |
Signal our poll() call to finish if it's blocked waiting (see the poll_timeout option for update()).
Definition at line 171 of file poll_set.cpp.
void ros::PollSet::update | ( | int | poll_timeout | ) |
Process all socket events.
This function will actually call poll() on the available sockets, and allow them to do their processing.
update() may only be called from one thread at a time
poll_timeout | The time, in milliseconds, for the poll() call to timeout after if there are no events. Note that this does not provide an upper bound for the entire function, just the call to poll() |
Definition at line 186 of file poll_set.cpp.
|
private |
Definition at line 151 of file poll_set.h.
|
private |
Definition at line 144 of file poll_set.h.
|
private |
Definition at line 142 of file poll_set.h.
|
private |
Definition at line 148 of file poll_set.h.
|
private |
Definition at line 149 of file poll_set.h.
|
private |
Definition at line 138 of file poll_set.h.
|
private |
Definition at line 139 of file poll_set.h.
|
private |
Definition at line 140 of file poll_set.h.
|
private |
Definition at line 146 of file poll_set.h.