1/* 2 * Copyright (c) 2009 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25// 26// kq++ - kqueue/kevent interface 27// 28#include <security_utilities/kq++.h> 29 30namespace Security { 31namespace UnixPlusPlus { 32 33 34KQueue::KQueue() 35{ 36 UnixError::check(mQueue = ::kqueue()); 37} 38 39KQueue::~KQueue() 40{ 41 UnixError::check(::close(mQueue)); 42} 43 44 45unsigned KQueue::operator () (const KEvent *updates, unsigned updateCount, 46 KEvent *events, unsigned eventCount, const timespec *timeout) 47{ 48 int rc = ::kevent64(mQueue, updates, updateCount, events, eventCount, 0, timeout); 49 UnixError::check(rc); 50 assert(rc >= 0); 51 return rc; 52} 53 54 55void KQueue::update(const KEvent &event, unsigned flags) 56{ 57 KEvent ev = event; 58 ev.flags = flags; 59 (*this)(&event, 1, NULL, NULL); 60} 61 62bool KQueue::receive(KEvent &event, const timespec *timeout) 63{ 64 return (*this)(&event, 1, timeout) > 0; 65} 66 67 68} // end namespace UnixPlusPlus 69} // end namespace Security 70