- if ((fd < 0) || (fd > 65535))
- 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;
- log(DEBUG,"epoll: Add socket to events, ep=%d socket=%d",EngineHandle,fd);
- readable ? ev.events = EPOLLIN | EPOLLET : ev.events = EPOLLOUT | EPOLLET;
- 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
-return true;