Back to index

glibc  2.9
pselect.c File Reference
#include <errno.h>
#include <signal.h>
#include <stddef.h>
#include <sys/time.h>
#include <sys/select.h>
#include <sysdep-cancel.h>
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.


int __pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask)

Function Documentation

int __pselect ( int  nfds,
fd_set readfds,
fd_set writefds,
fd_set exceptfds,
const struct timespec timeout,
const sigset_t sigmask 

Definition at line 35 of file pselect.c.

  struct timeval tval;
  int retval;
  sigset_t savemask;

  /* Change nanosecond number to microseconds.  This might mean losing
     precision and therefore the `pselect` should be available.  But
     for now it is hardly found.  */
  if (timeout != NULL)
    TIMESPEC_TO_TIMEVAL (&tval, timeout);

  /* The setting and restoring of the signal mask and the select call
     should be an atomic operation.  This can't be done without kernel
     help.  */
  if (sigmask != NULL)
    __sigprocmask (SIG_SETMASK, sigmask, &savemask);

  /* Note the pselect() is a cancellation point.  But since we call
     select() which itself is a cancellation point we do not have
     to do anything here.  */
  retval = __select (nfds, readfds, writefds, exceptfds,
                   timeout != NULL ? &tval : NULL);

  if (sigmask != NULL)
    __sigprocmask (SIG_SETMASK, &savemask, NULL);

  return retval;

Here is the call graph for this function: