We're seeing a similar issue in another app. This appears to be happening on iOS 13 and iOS 14 only. Before we send data, we check the state of NWUDPSession (we expect it to be "ready" and viable):
func send(_ datagram: Data) -> Void {
				queuedDatagrams.append(datagram)
				guard let currentSession = session else {
						Log.info("cannot send packet; session does not exist")
						return
				}
				guard currentSession.state == .ready, currentSession.isViable else {
						Log.info("\(address(of: currentSession)) cannot send packet; state: \(currentSession.state), viable: \(currentSession.isViable)")
						return
				}
				currentSession.writeMultipleDatagrams(queuedDatagrams) { [weak self] (error) in
						Log.error(error)
						if let error = error {
								self?.handleError(error)
						}
				}
				queuedDatagrams = []
		}
but even with this check, we're still seeing this crash happen a lot.