/* * Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved. * * This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit). * * Use of this source code is governed by MIT license that can be found in the * LICENSE file in the root of the source tree. All contributing project authors * may be found in the AUTHORS file in the root of the source tree. */ #ifndef ZLMEDIAKIT_EPOLL_H #define ZLMEDIAKIT_EPOLL_H #include "wepoll.h" #include #include // 屏蔽 EPOLLET #define EPOLLET 0 namespace toolkit { // 索引handle extern std::map s_wepollHandleMap; extern int s_handleIndex; extern std::mutex s_handleMtx; // 屏蔽epoll_create epoll_ctl epoll_wait参数差异 inline int epoll_create(int size) { HANDLE handle = ::epoll_create(size); if (!handle) { return -1; } { std::lock_guard lck(s_handleMtx); int idx = ++s_handleIndex; s_wepollHandleMap[idx] = handle; return idx; } } inline int epoll_ctl(int ephnd, int op, SOCKET sock, struct epoll_event *ev) { HANDLE handle; { std::lock_guard lck(s_handleMtx); handle = s_wepollHandleMap[ephnd]; } return ::epoll_ctl(handle, op, sock, ev); } inline int epoll_wait(int ephnd, struct epoll_event *events, int maxevents, int timeout) { HANDLE handle; { std::lock_guard lck(s_handleMtx); handle = s_wepollHandleMap[ephnd]; } return ::epoll_wait(handle, events, maxevents, timeout); } } // namespace toolkit #endif // ZLMEDIAKIT_EPOLL_H