Hi,
Got the following error when connecting to a server (which I'm not in control of): Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=-4, NSUnderlyingError=0x6000034bd530 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x6000018f02d0 [0x7fff8a349bf0]>{length = 16, capacity = 16, bytes = 0x100201bb8b7011830000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}
Looks like NSURLErrorDomain Code=-1005 is: https://developer.apple.com/documentation/cfnetwork/cfnetworkerrors/cfurlerrornetworkconnectionlost
But couldn't find what kCFStreamErrorCodeKey=-4 means.
Is this error code defined anywhere (for example in a header file)? Or is it only an internal error code?
Br, Johan
With regards the domain value in CFStreamError, here’s a quick decoder ring:
| -1 | CFStreamErrorDomain.custom | <CoreFoundation/CFStream.h> |
| 1 | CFStreamErrorDomain.POSIX | <CoreFoundation/CFStream.h> |
| 2 | CFStreamErrorDomain.macOSStatus | <CoreFoundation/CFStream.h> |
| 3 | kCFStreamErrorDomainSSL | <CoreFoundation/CFStream.h> |
| 4 | kCFStreamErrorDomainHTTP | <CFNetwork/CFHTTPStream.h> |
| 5 | kCFStreamErrorDomainSOCKS | <CoreFoundation/CFStream.h> |
| 6 | kCFStreamErrorDomainFTP | <CFNetwork/CFFTPStream.h> |
| 7 | kCFStreamErrorDomainWinSock | <CFNetwork/CFSocketStream.h> |
| 10 | kCFStreamErrorDomainNetServices | <CFNetwork/CFNetServices.h> |
| 11 | kCFStreamErrorDomainMach | <CFNetwork/CFNetServices.h> |
| 12 | kCFStreamErrorDomainNetDB | <CFNetwork/CFHost.h> |
So a domain of 4 translates to kCFStreamErrorDomainHTTP.
The code value of -4 is trickier. AFAICT this isn’t in any public header (the closest public declaration is kCFStreamErrorHTTPBadURL, which is -3). Looking at the code it seems that -4 translates to a ‘connection lost’ error.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
ps Here’s the code that generates that table:
import Foundation
struct ErrorDomainInfo {
var number: Int
var name: String
var header: String
init(_ number: Int, _ name: String, _ header: String) {
self.number = number ; self.name = name ; self.header = header
}
init(_ number: Int32, _ name: String, _ header: String) {
self.number = Int(number) ; self.name = name ; self.header = header
}
}
let domains: [ErrorDomainInfo] = [
.init(kCFStreamErrorDomainSOCKS, "kCFStreamErrorDomainSOCKS", "<CoreFoundation/CFStream.h>"),
.init(kCFStreamErrorDomainFTP, "kCFStreamErrorDomainFTP", "<CFNetwork/CFFTPStream.h>"),
.init(kCFStreamErrorDomainHTTP, "kCFStreamErrorDomainHTTP", "<CFNetwork/CFHTTPStream.h>"),
.init(kCFStreamErrorDomainNetDB, "kCFStreamErrorDomainNetDB", "<CFNetwork/CFHost.h>"),
.init(kCFStreamErrorDomainMach, "kCFStreamErrorDomainMach", "<CFNetwork/CFNetServices.h>"),
.init(kCFStreamErrorDomainNetServices, "kCFStreamErrorDomainNetServices", "<CFNetwork/CFNetServices.h>"),
.init(kCFStreamErrorDomainWinSock, "kCFStreamErrorDomainWinSock", "<CFNetwork/CFSocketStream.h>"),
.init(kCFStreamErrorDomainSSL, "kCFStreamErrorDomainSSL", "<CoreFoundation/CFStream.h>"),
.init(CFStreamErrorDomain.custom.rawValue, "CFStreamErrorDomain.custom", "<CoreFoundation/CFStream.h>"),
.init(CFStreamErrorDomain.POSIX.rawValue, "CFStreamErrorDomain.POSIX", "<CoreFoundation/CFStream.h>"),
.init(CFStreamErrorDomain.macOSStatus.rawValue, "CFStreamErrorDomain.macOSStatus", "<CoreFoundation/CFStream.h>"),
]
func main() {
func pad(_ s: String, _ width: Int) -> String {
s.withCString {
String(format: "%\(width < 0 ? "-" : "")*s", abs(width), $0)
}
}
print("|", pad("**Number**", 10), "|", pad("**Identifier**", -33), "|", pad("**Header**", -30), "|")
print("|", pad("----------", 10), "|", pad("--------------", -33), "|", pad("----------", -30), "|")
for d in domains.sorted(by: { $0.number < $1.number }) {
print("|", pad("\(d.number)", 10), "|", pad("`\(d.name)`", -33), "|", pad("`\(d.header)`", -30), "|")
}
}
main()