add ply_fd_has_data and ply_fd_can_take_data apis

The calls in this commit just do a one-off poll of the passed
in fd to see if the fd is read for read or write call
This commit is contained in:
Ray Strode 2007-05-16 15:50:31 -04:00
parent 088020c3c2
commit e7c3b04e4f
2 changed files with 31 additions and 0 deletions

View file

@ -5,6 +5,7 @@
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <poll.h>
#include <stdlib.h>
#include <sys/types.h>
@ -70,3 +71,31 @@ ply_write (int fd,
return bytes_left_to_write == 0;
}
bool
ply_fd_has_data (int fd)
{
struct pollfd poll_data;
int result;
poll_data.fd = fd;
poll_data.events = POLLIN | POLLPRI;
poll_data.revents = 0;
result = poll (&poll_data, 1, 10);
return result == 1;
}
bool
ply_fd_can_take_data (int fd)
{
struct pollfd poll_data;
int result;
poll_data.fd = fd;
poll_data.events = POLLOUT;
poll_data.revents = 0;
result = poll (&poll_data, 1, 10);
return result == 1;
}

View file

@ -44,6 +44,8 @@ bool ply_open_unidirectional_pipe (int *sender_fd,
bool ply_write (int fd,
const void *buffer,
size_t number_of_bytes);
bool ply_fd_has_data (int fd);
bool ply_fd_can_take_data (int fd);
#endif
#endif /* PLY_UTILS_H */