static struct socket * _add_client(struct mread_pool * self, int fd) { struct socket * s = _alloc_socket(self); if (s == NULL) { close(fd); return NULL; } #ifdef HAVE_EPOLL struct epoll_event ev; ev.events = EPOLLIN; ev.data.ptr = s; if (epoll_ctl(self->epoll_fd, EPOLL_CTL_ADD, fd, &ev) == -1) { close(fd); return NULL; } #elif HAVE_KQUEUE struct kevent ke; EV_SET(&ke, fd, EVFILT_READ, EV_ADD, 0, 0, s); if (kevent(self->kqueue_fd, &ke, 1, NULL, 0, NULL) == -1) { close(fd); return NULL; } #endif s->fd = fd; s->node = NULL; s->status = SOCKET_SUSPEND; return s; }
static struct socket * _add_client(struct mread_pool * self, int fd) { struct socket * s = _alloc_socket(self); if (s == NULL) { close(fd); return NULL; } struct epoll_event ev; ev.events = EPOLLIN; ev.data.ptr = s; if (epoll_ctl(self->epoll_fd, EPOLL_CTL_ADD, fd, &ev) == -1) { close(fd); return NULL; } s->fd = fd; s->node = NULL; s->status = SOCKET_SUSPEND; return s; }
static void _add_client(struct mread_pool * self, int fd) { struct socket * s = _alloc_socket(self); if (s == NULL) { close(fd); return; } struct epoll_event ev; ev.events = EPOLLIN; ev.data.fd = fd; if (epoll_ctl(self->epoll_fd, EPOLL_CTL_ADD, fd, &ev) == -1) { close(fd); return; } s->fd = fd; s->node = NULL; s->status = SOCKET_SUSPEND; int id = s - self->sockets; map_insert(self->socket_hash , fd , id); }