<!--
{
  "availability" : [
    "macOS: 10.15.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "NetworkExtension",
  "identifier" : "/documentation/NetworkExtension/NEFilterPacketProvider/packetHandler",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Property",
  "symbol" : {
    "kind" : "Instance Property",
    "modules" : [
      "Network Extension"
    ],
    "preciseIdentifier" : "c:objc(cs)NEFilterPacketProvider(py)packetHandler"
  },
  "title" : "packetHandler"
}
-->

# packetHandler

A Swift closure or an ObjectiveC block that handles each packet received by the filter.

```
var packetHandler: NEFilterPacketHandler? { get set }
```

## Discussion

Set this property to a handler that returns a [`NEFilterPacketProvider.Verdict`](/documentation/NetworkExtension/NEFilterPacketProvider/Verdict) for each packet it receives.

Since there may be multiple filtering sources presenting frames to the provider,
multiple simultaneous threads may execute this packet handler.
Therefore, the packet handler must be able to handle execution in a multi-threaded environment.

---

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)