taskrambler  0.1.9
Web server and task management solution.
poll.c File Reference
#include <poll.h>
#include <errno.h>
#include "server.h"
#include "logger.h"
#include "utils/signalHandling.h"
+ Include dependency graph for poll.c:

Go to the source code of this file.

Macros

#define POLLFD(ptr)   ((struct pollfd *)(ptr))
 

Functions

int serverPoll (Server this)
 

Detailed Description

Author
Georg Hopp

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file poll.c.

Macro Definition Documentation

#define POLLFD (   ptr)    ((struct pollfd *)(ptr))

Definition at line 31 of file poll.c.

Function Documentation

int serverPoll ( Server  this)

put all closed fds to end of array in O(this->nfds)

Definition at line 34 of file poll.c.

References doShutdown, logger, LOGGER_CRIT, and loggerLog().

Referenced by serverRun().

34  {
35  int events;
36 
37  /**
38  * put all closed fds to end of array in O(this->nfds)
39  */
40  struct pollfd * fda = &(this->fds[2]);
41  struct pollfd * fdb = &(this->fds[this->nfds-1]);
42 
43  while (fda <= fdb) {
44  while (0 == fdb->fd && fda <= fdb) {
45  fdb--;
46  this->nfds--;
47  }
48 
49  while (0 != fda->fd && fda <= fdb) fda++;
50 
51  if (fda < fdb) {
52  memcpy(fda, fdb, sizeof(struct pollfd));
53  fdb--;
54  this->nfds--;
55  }
56  }
57 
58  /*
59  * wait for handles to become ready
60  */
61  do {
62  if (-1 == (events = poll(this->fds, this->nfds, -1))) {
63  switch (errno) {
64  default:
65  case EBADF:
66  case EINVAL:
67  case ENOMEM:
68  doShutdown = 1;
69  // DROP THROUGH
70 
71  case EINTR:
73  "poll systemcall failed: [%s] - service terminated",
74  strerror(errno));
75  }
76  }
77  } while (! doShutdown && 0 >= events);
78 
79  return events;
80 }
Logger logger
Definition: taskrambler.c:66
void loggerLog(void *, logger_level, const char *const,...)
Definition: i_logger.c:38
volatile int doShutdown

+ Here is the call graph for this function:

+ Here is the caller graph for this function: