My App is opening streams like so:
var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?
CFStreamCreatePairWithSocketToHost(nil, "192.168.42.1" as NSString,
																		UInt32(7878),
																		&readStream, &writeStream)
self.inputStream = readStream!.takeRetainedValue()
self.outputStream = writeStream!.takeRetainedValue()
if let inputStream = self.inputStream, let outputStream = self.outputStream {
		self.reader = StreamReader("WiFi", self.responses, onOpened: { successful in
		})
		self.writer = StreamWriter("WiFi")
		
		CFReadStreamSetDispatchQueue(inputStream, self.workQueue)
		CFWriteStreamSetDispatchQueue(outputStream, self.workQueue)
		
		inputStream.delegate = self.reader
		inputStream.open()
		
		self.writer!.outputStream = outputStream
		outputStream.delegate = self.writer
		outputStream.open()
}
The StreamReader class has a onOpened callback which is empty here but controls further app flow, like so (in StreamReader):
case Stream.Event.errorOccurred:
let e: CFStreamError = aStream.streamError as! CFStreamError
os_log(.default, log: log, "error occured: %{public}s", aStream.streamError?.localizedDescription ?? "")
os_log(.default, log: log, "error occured: %{public}d", aStream.streamStatus.rawValue)
if !opened {
self.onOpened?(false)
}
self.onStopped?()
I try to read the raw error code, in order to comply with the local network privacy changes as mentioned in https://developer.apple.com/forums/thread/661606 for example.
However, without a way to read the current status, I rely on the return code of the stream callback Stream.Event.errorOccurred.
Also really thankful if someone could point me to good documentation on this.