According to man(2) poll indeed...
The field revents is an output parameter, filled by the kernel
with the events that actually occurred. The bits returned in
revents can include any of those specified in events, or one of
the values POLLERR, POLLHUP, or POLLNVAL. (These three bits are
meaningless in the events field, and will be set in the revents
field whenever the corresponding condition is true.)
poll.h
defines those as
#define POLLIN 0x001 /* There is data to read. */
#define POLLPRI 0x002 /* There is urgent data to read. */
#define POLLOUT 0x004 /* Writing now will not block. */
// etc...
so armed with this knowledge,
if(!(fds.revents & 1))
is the same as
if(!(fds.revents & POLLIN))
which means "if the "there is data to read" bit is not set", i.e. "if there is no data to read".