<!--
{
  "availability" : [
    "DriverKit: -",
    "iOS: -",
    "iPadOS: -",
    "macOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "DriverKit",
  "identifier" : "/documentation/DriverKit/IOEventLink",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "DriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOEventLink"
  },
  "title" : "IOEventLink"
}
-->

# IOEventLink

```
class IOEventLink;
```

## Overview

\abstract IOEventLink allows for fast IPC, suitable for
realtime applications.
\discussion 

Applications that open user clients to a DriverKit driver can set up an eventlink
for fast signaling.

To configure an eventlink, the application will have to first create an eventlink object
with os_eventlink_create() (see <os/eventlink_private.h>). The application then has to extract
the remote eventlink port with os_eventlink_extract_remote_port(). To send the remote eventlink port
to the driver, use:

const char * name = “Event Link Name”; // This must match the name the driver used in IOEventLink::Create().
kern_return_t ret = IOConnectTrap3(connect, // user client connection (io_connect_t)
0, // specifies event link configuration trap
(uintptr_t)name,
(uintptr_t)strlen(name),
(uintptr_t)remotePort // port from os_eventlink_extract_remote_port
);

Once the remote eventlink port has been sent to the driver, the driver should be notified with a user-defined external method
or other existing signaling mechanism. The driver should handle this by activating the IOEventLink with Activate().

## Topics

### Instance Methods

[`kern_return_t Activate();`](/documentation/DriverKit/IOEventLink/Activate)

[`kern_return_t Associate(uint64_t options);`](/documentation/DriverKit/IOEventLink/Associate)

[`kern_return_t Cancel();`](/documentation/DriverKit/IOEventLink/Cancel)

[`kern_return_t Disassociate();`](/documentation/DriverKit/IOEventLink/Disassociate)

[`kern_return_t Invalidate();`](/documentation/DriverKit/IOEventLink/Invalidate)

[`kern_return_t Signal();`](/documentation/DriverKit/IOEventLink/Signal)

[`kern_return_t SignalAndWait(uint64_t *signalsConsumed);`](/documentation/DriverKit/IOEventLink/SignalAndWait)

[`kern_return_t SignalAndWaitUntil(uint64_t clockOptions, uint64_t timeout, uint64_t *signalsConsumed);`](/documentation/DriverKit/IOEventLink/SignalAndWaitUntil)

[`kern_return_t Wait(uint64_t *signalsConsumed);`](/documentation/DriverKit/IOEventLink/Wait)

[`kern_return_t WaitUntil(uint64_t clockOptions, uint64_t timeout, uint64_t *signalsConsumed);`](/documentation/DriverKit/IOEventLink/WaitUntil)

[`virtual void free();`](/documentation/DriverKit/IOEventLink/free)

[`virtual bool init();`](/documentation/DriverKit/IOEventLink/init)

### Type Methods

[`static kern_return_t Create(OSString *name, IOUserClient *userClient, IOEventLink **eventLink);`](/documentation/DriverKit/IOEventLink/Create)

## Relationships

### Inherits From

[`OSObject`](/documentation/DriverKit/OSObject)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)