Esempio n. 1
0
static void closeStream(int i)
{
    int j;

    close(stream[i].fd);
    FD_CLR(stream[i].fd, &activeSet);
    FD_CLR(stream[i].fd, &readSet);
    FD_CLR(stream[i].fd, &writeSet);

    stream[i].fd = INVALID_SOCKET; /* Free for re-use */
    if (i == socketIdxMax)
    {
        socketIdxMax = 0;
        socketFdMax = 0;
        for (j = i - 1; j >= 0; j--)
        {
            if (stream[j].fd != INVALID_SOCKET)
            {
                socketIdxMax = CB_MAX(socketIdxMax, j);
                socketFdMax = CB_MAX(socketFdMax, stream[j].fd);
            }
        }
    }
    logDebug("closeStream(%d) (%u..%u fdMax=%d)\n", i, socketIdxMin, socketIdxMax, socketFdMax);
}
Esempio n. 2
0
static void closeStream(int i)
{
  logDebug("closeStream(%d)\n", i);

  close(stream[i].fd);
  FD_CLR(stream[i].fd, &activeSet);
  FD_CLR(stream[i].fd, &readSet);
  FD_CLR(stream[i].fd, &writeSet);

  stream[i].fd = -1; /* Free for re-use */
  if (i == socketIdxMax)
  {
    socketIdxMax = -1;
    socketFdMax = -1;
    for (i--; i >= 0; i--)
    {
      if (stream[i].fd != -1)
      {
        socketIdxMax = CB_MAX(socketIdxMax, i);
        socketFdMax = CB_MAX(socketFdMax, stream[i].fd);
      }
    }
  }
  logDebug("closeStream(%d) IdMax=%u FdMax=%d\n", i, socketIdxMax, socketFdMax);
}
Esempio n. 3
0
File: main.c Progetto: lgelo/canboat
int setFdUsed(SOCKET fd, StreamType ct)
{
  int i;

  /* Find a free entry in socketFd(i) */
  for (i = 0; i <= socketIdxMax; i++)
  {
    if (stream[i].fd == -1 || stream[i].fd == fd)
    {
      break;
    }
  }

  if (i == FD_SETSIZE)
  {
    logError("Already %d active streams, ignoring new one\n", FD_SETSIZE);
    close(fd);
    return -1;
  }

  stream[i].fd = fd;
  stream[i].timeout = epoch() + UPDATE_INTERVAL;
  stream[i].type = ct;
  stream[i].readHandler = readHandlers[ct];

  FD_SET(fd, &activeSet);
  if (stream[i].readHandler)
  {
    logDebug("Enabling fd=%d in the readSet\n", fd);
    FD_SET(fd, &readSet);
  }
  else
  {
    logDebug("Disabling fd=%d in the readSet\n", fd);
    FD_CLR(fd, &readSet);
  }

  switch (stream[i].type)
  {
  case CLIENT_JSON:
  case CLIENT_JSON_STREAM:
  case CLIENT_NMEA0183_STREAM:
  case DATA_OUTPUT_STREAM:
  case DATA_OUTPUT_COPY:
    logDebug("Enabling fd=%d in the writeSet\n", fd);
    FD_SET(fd, &writeSet);
    break;
  default:
    logDebug("Clear fd=%d in the writeSet\n", fd);
    FD_CLR(fd, &writeSet);
  }

  socketIdxMax = CB_MAX(socketIdxMax, i);
  socketFdMax = CB_MAX(socketFdMax, fd);
  logDebug("New client %u type %d %u..%u fd=%d fdMax=%d\n", i, stream[i].type, socketIdxMin, socketIdxMax, fd, socketFdMax);

  return i;
}
Esempio n. 4
0
void setLogLevel(LogLevel level)
{
  logLevel = CB_MIN(CB_MAX(level, LOGLEVEL_FATAL), LOGLEVEL_DEBUG);
  logDebug("Loglevel now %d\n", logLevel);
}