45#include <sys/devpoll.h>
48#define DEBUG_DEVPOLL 0
130 "FD " << fd <<
", events=" << events
155 "comm_devpoll_incoming",
156 "comm_incoming() stats",
197 fatalf(
"comm_select_init: can't open /dev/poll: %s\n",
xstrerr(xerrno));
223 debugs(5, 5,
"FD " << fd <<
", type=" << type <<
224 ", handler=" << handler <<
", client_data=" << client_data <<
225 ", timeout=" << timeout);
240 if ( handler !=
NULL ) {
243 state_new |= POLLOUT;
252 }
else if ( state_old & POLLIN ) {
258 if ( handler !=
NULL ) {
260 state_new |= POLLOUT;
267 }
else if ( state_old & POLLOUT ) {
269 state_new |= POLLOUT;
276 if ( bits_changed & state_old ) {
344 for (i = 0; i < num; ++i) {
358 if (
do_poll.dp_fds[i].revents & (POLLERR | POLLHUP | POLLNVAL)) {
360 "ERROR: devpoll event failure: fd " << fd
371 "Calling read handler on FD " << fd
380 "no read handler for FD " << fd
388 if (
do_poll.dp_fds[i].revents & POLLOUT) {
393 "Calling write handler on FD " << fd
402 "no write handler for FD " << fd
AsHex< Integer > asHex(const Integer n)
a helper to ease AsHex object creation
static void comm_update_fd(int fd, pollfd_events_t events)
Register change in desired polling state for file descriptor.
static struct @32 devpoll_update
Update list.
static void comm_flush_updates(void)
Write batched file descriptor event changes to poll device.
static void commDevPollRegisterWithCacheManager(void)
static struct _devpoll_state * devpoll_state
static struct dvpoll do_poll
static OBJH commIncomingStats
StatHistBinDumper statHistIntDumper
unsigned long int select_loops
void dump(StoreEntry *sentry, StatHistBinDumper *bd) const
struct fde::_fde_flags flags
void fd_open(const int fd, unsigned int, const char *description)
int ignoreErrno(int ierrno)
#define debugs(SECTION, LEVEL, CONTENT)
#define COMM_SELECT_WRITE
void fatalf(const char *fmt,...)
void QuickPollRequired(void)
Comm::Flag DoSelect(int)
Do poll and trigger callback functions as appropriate.
void SelectLoopInit(void)
Initialize the module on Squid startup.
void SetSelect(int, unsigned int, PF *, void *, time_t)
Mark an FD to be watched for its IO status.
void RegisterAction(char const *action, char const *desc, OBJH *handler, Protected, Atomic, Format)
void storeAppendPrintf(StoreEntry *e, const char *fmt,...)
bool read_pending
buffering readMethod_ has data to give (regardless of socket state)
time_t getCurrentTime() STUB_RETVAL(0) int tvSubUsec(struct timeval
int xwrite(int fd, const void *buf, size_t bufSize)
POSIX write(2) equivalent.
int xopen(const char *filename, int oflag, int pmode=0)
POSIX open(2) equivalent.
void * xcalloc(size_t n, size_t sz)
const char * xstrerr(int error)