Example #1
0
/* b_accept_()
 */
int
b_accept_(int s, struct sockaddr *addr, socklen_t *addrlen)
{
    sigset_t   oldMask;
    sigset_t   newMask;
    int        cc;

    blockSigs_(0, &newMask, &oldMask);

    cc = accept(s, addr, addrlen);
    sigprocmask(SIG_SETMASK, &oldMask, NULL);

    return (cc);

}  /* b_accept_() */
Example #2
0
int
b_connect_ (int s, struct sockaddr *name, int namelen, int timeout)
{
  struct itimerval old_itimer;
  unsigned int oldTimer;
  sigset_t newMask, oldMask;
  struct sigaction action, old_action;


  if (getitimer (ITIMER_REAL, &old_itimer) < 0)
    return -1;


  action.sa_flags = 0;
  action.sa_handler = (SIGFUNCTYPE) alarmer_;


  sigfillset (&action.sa_mask);
  sigaction (SIGALRM, &action, &old_action);

  unblocksig (SIGALRM);

  blockSigs_ (SIGALRM, &newMask, &oldMask);

  oldTimer = alarm (timeout);

  if (connect (s, name, namelen) < 0)
    {
      if (errno == EINTR)
	errno = ETIMEDOUT;

      alarm (oldTimer);
      setitimer (ITIMER_REAL, &old_itimer, NULL);

      sigaction (SIGALRM, &old_action, NULL);
      sigprocmask (SIG_SETMASK, &oldMask, NULL);
      return -1;
    }

  alarm (oldTimer);

  setitimer (ITIMER_REAL, &old_itimer, NULL);

  sigaction (SIGALRM, &old_action, NULL);
  sigprocmask (SIG_SETMASK, &oldMask, NULL);
  return 0;
}