OPipe::OPipe(const OPipe &other, OThread *parent) : OIODevice() { fdes[0] = other.fdes[0]; fdes[1] = other.fdes[1]; //we only want to copy over the file descriptors par = parent; registerFd(); }
bool SelectPoll::init() { if(!notifier_.init()) { return false; } IOCallback cb ([this] (uint32_t ev) { notifier_.onEvent(ev); }); registerFd(notifier_.getReadFD(), KUMA_EV_READ|KUMA_EV_ERROR, std::move(cb)); return true; }
OPipe::OPipe(OThread *parent) : OIODevice() { //create the pipe #ifdef __windows__ CreatePipe(&fdes[0], &fdes[1], 0, 0); #else ::pipe(fdes); #endif par = parent; registerFd(); }
bool VPoll::init() { if (!notifier_->ready()) { if (!notifier_->init()) { return false; } IOCallback cb([this](KMEvent ev, void*, size_t) { notifier_->onEvent(ev); }); registerFd(notifier_->getReadFD(), KUMA_EV_READ | KUMA_EV_ERROR, std::move(cb)); } return true; }
bool EPoll::init() { epoll_fd_ = epoll_create(MAX_EPOLL_FDS); if(INVALID_FD == epoll_fd_) { return false; } if(!notifier_.init()) { return false; } IOCallback cb ([this](uint32_t ev) { notifier_.onEvent(ev); }); registerFd(notifier_.getReadFD(), KUMA_EV_READ|KUMA_EV_ERROR, std::move(cb)); return true; }
bool KQueue::init() { kqueue_fd_ = ::kqueue(); if(INVALID_FD == kqueue_fd_) { return false; } if (!notifier_->ready()) { if(!notifier_->init()) { return false; } IOCallback cb ([this](uint32_t ev) { notifier_->onEvent(ev); }); registerFd(notifier_->getReadFD(), KUMA_EV_READ|KUMA_EV_ERROR, std::move(cb)); } return true; }
void OPipe::parent(OThread *p) { unregisterFd(); par = p; registerFd(); }