- if ((fd < 0) || (fd > MAX_DESCRIPTORS))
- {
- log(DEFAULT,"ERROR: FD of %d added above max of %d",fd,MAX_DESCRIPTORS);
- return false;
- }
- if (GetRemainingFds() <= 1)
- {
- log(DEFAULT,"ERROR: System out of file descriptors!");
- return false;
- }
-#ifdef USE_SELECT
- fds[fd] = fd;
-#endif
- ref[fd] = type;
- if (readable)
- {
- log(DEBUG,"Set readbit");
- ref[fd] |= X_READBIT;
- }
- log(DEBUG,"Add socket %d",fd);
-#ifdef USE_EPOLL
- struct epoll_event ev;
- memset(&ev,0,sizeof(struct epoll_event));
- log(DEBUG,"epoll: Add socket to events, ep=%d socket=%d",EngineHandle,fd);
- readable ? ev.events = EPOLLIN : ev.events = EPOLLOUT;
- ev.data.fd = fd;
- int i = epoll_ctl(EngineHandle, EPOLL_CTL_ADD, fd, &ev);
- if (i < 0)
- {
- log(DEBUG,"epoll: List insertion failure!");
- return false;
- }
-#endif
-#ifdef USE_KQUEUE
- struct kevent ke;
- log(DEBUG,"kqueue: Add socket to events, kq=%d socket=%d",EngineHandle,fd);
- EV_SET(&ke, fd, readable ? EVFILT_READ : EVFILT_WRITE, EV_ADD, 0, 0, NULL);
- int i = kevent(EngineHandle, &ke, 1, 0, 0, NULL);
- if (i == -1)
- {
- log(DEBUG,"kqueue: List insertion failure!");
- return false;
- }
-#endif
- CurrentSetSize++;