当我尝试在Apple Mail中配置我的企业邮件帐户(Exchange)时,我可以在控制台中看到以下错误日志.但是,在Outlook 2011 Mail客户端中配置相同的帐户时,我看不到此错误.当我通过WebMail(OWA)访问我的Exchange帐户时,甚至可以看到相同的错误日志.
它是CFNetwork API特有的吗?我可以看到使用CFNetwork API进行通信的所有邮件客户端的失败错误.
com.apple.WebKit.Networking [1145] CFNetwork SSLHandshake失败(-9806)com.apple.WebKit.Networking [1145] CFNetwork SSLHandshake失败(-9806)com.apple.WebKit.Networking [1145] CFNetwork SSLHandshake失败(-9806) com.apple.WebKit.Networking [1145] CFNetwork SSLHandshake失败(-9806)邮件[1658] CFNetwork SSLHandshake失败(-9806)邮件[1658] CFNetwork SSLHandshake失败(-9806)邮件[1658] CFNetwork SSLHandshake失败(-9806) )邮件[1658] NSURLConnection/CFURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9806)邮件[1658] CFNetwork SSLHandshake失败(-9806)
我正在尝试从我正在开发的应用程序中监控iPhone上的网络活动.iOS是否支持类似netstat的命令或类似的东西,可以告诉我入站和出站连接是什么活动的?
我发现一个问题,其中CFReadStreamRead,作为流式文件上传的一部分,从来没有返回.
这似乎只发生在iOS7上 - 而且在对物理设备进行调试时比在模拟器中更常见 - 或者至少在那里更明显.
我们POST通过直线阻塞(非事件驱动)CFNetwork调用来获取文件的HTTP(或HTTPS,问题以本地托管或远程服务器的方式发生).调用此处理程序的C代码是必需的; 没有回拨的规定.
这很好,网络调用发生在后台线程和/或异步调度.
有问题的网络代码归结为(为简洁起见,删除错误处理):
CFReadStreamRef upload = CFReadStreamCreateWithFile(
kCFAllocatorDefault, upload_file_url);
CFRelease(upload_file_url);
CFReadStreamOpen(upload);
CFReadStreamRef myReadStream = CFReadStreamCreateForStreamedHTTPRequest(
kCFAllocatorDefault, myRequest, upload);
CFReadStreamOpen(myReadStream);
CFIndex numBytesRead = CFReadStreamRead(myReadStream, buf, sizeof(buf));
// etc.
Run Code Online (Sandbox Code Playgroud)
就其本身而言,此代码希望立即在iOS7下挂起.如果我usleep在它之前添加一个带有一些调用的循环(CFReadStreamHasBytesAvailable沿途检查),它几乎总是会成功.每隔几百次尝试,它仍将失败,永不返回.同样,主线程不受影响.
我希望通用汽车能够清除这种行为,但它仍然存在.
添加runloop/callback方法以监视字节可用事件无效 - 当调用挂起时,也不会看到任何事件.
有关为什么会发生这种情况或如何防止这种情况的任何建议?其他人CFReadStream在iOS 7下看到不同的行为?
我正在处理的应用程序遇到了一个我无法重现的非常奇怪的崩溃,我所知道的唯一信息是来自Crashlytics.它只发生在ios7和谷歌搜索mmapFileDeallocate返回一个网站,其他人遇到相同的崩溃,但他们的问题消失了os更新.
这是堆栈:
Thread : Crashed: tcpConnWorkQueue
0 libobjc.A.dylib 0x3aa00b36 objc_msgSend + 21
1 CFNetwork 0x2fece4c3 __CFURLCache::removeMMappedDataFromSet(void*) + 34
2 CFNetwork 0x2fecfa45 mmapFileDeallocate(void*, void*) + 24
3 CoreFoundation 0x3024ef5f __CFDataDeallocate + 30
4 CoreFoundation 0x301c75f7 CFRelease + 462
5 CoreFoundation 0x3023fed5 __CFArrayReleaseValues + 292
6 CoreFoundation 0x301c75f7 CFRelease + 462
7 CFNetwork 0x2fe5f1d5 __CFCachedURLResponse::~__CFCachedURLResponse() + 40
8 CFNetwork 0x2fe5f19f __CFCachedURLResponse::~__CFCachedURLResponse() + 10
9 CoreFoundation 0x301c75f7 CFRelease + 462
10 CFNetwork 0x2feaeda1 HTTPProtocol::~HTTPProtocol() + 732
11 CoreFoundation 0x301c75f7 CFRelease + 462
12 …Run Code Online (Sandbox Code Playgroud) 我试图禁用一些密码(弱),如单DES,单DES 40位等.
我尝试使用这段代码如何在Cocoa中使用CFSocket/CFStream时设置SSL密码?从邮件列表消息CFNetwork SSL和长阻塞延迟但我需要访问套接字数据来获取CFDataRef.
这是我试图在AFURLConnectionOperation类中的握手方法中插入的代码:
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge (NSURLAuthenticationChallenge *)challenge{
CFReadStreamRef stream = [sock getCFReadStream];
CFDataRef data = CFReadStreamCopyProperty(stream, kCFStreamPropertySocketSSLContext);
// Extract the SSLContextRef from the CFData
SSLContextRef sslContext;
CFDataGetBytes(data, CFRangeMake(0, sizeof(SSLContextRef)), &sslContext);
// Get all enabled ciphers
size_t numCiphers;
SSLGetNumberEnabledCiphers(sslContext,&numCiphers);
SSLCipherSuite ciphers[numCiphers];
SSLGetEnabledCiphers(sslContext,ciphers,&numCiphers);
// Create a new cipher array with only non-DH ciphers, and set it
SSLCipherSuite finalCiphers[numCiphers];
int numFinalCiphers = 0;
for(int i=0; i<numCiphers; i++) {
SSLCipherSuite suite = …Run Code Online (Sandbox Code Playgroud) 我正在尝试扩展SocketRocket库的功能.我想添加身份验证功能.
由于此库使用CFNetwork CFHTTPMessage*API进行HTTP功能(需要启动Web套接字连接),我正在尝试使用此API来提供身份验证.
有完美匹配的功能:CFHTTPMessageAddAuthentication,但它不能像我期望的那样工作(据我理解的文档).
以下是显示问题的代码示例:
- (CFHTTPMessageRef)createAuthenticationHandShakeRequest: (CFHTTPMessageRef)chalengeMessage {
CFHTTPMessageRef request = [self createHandshakeRequest];
BOOL result = CFHTTPMessageAddAuthentication(request,
chalengeMessage,
(__bridge CFStringRef)self.credentials.user,
(__bridge CFStringRef)self.credentials.password,
kCFHTTPAuthenticationSchemeDigest, /* I've also tried NULL for use strongest supplied authentication */
NO);
if (!result) {
NSString *chalengeDescription = [[NSString alloc] initWithData: CFBridgingRelease(CFHTTPMessageCopySerializedMessage(chalengeMessage))
encoding: NSUTF8StringEncoding];
NSString *requestDescription = [[NSString alloc] initWithData: CFBridgingRelease(CFHTTPMessageCopySerializedMessage(request))
encoding: NSUTF8StringEncoding];
SRFastLog(@"Failed to add authentication data `%@` to a request:\n%@After a chalenge:\n%@",
self.credentials, requestDescription, chalengeDescription); …Run Code Online (Sandbox Code Playgroud) 我通过扩展NSURLProtocol在我的应用程序中使用自定义URL协议.它大部分时间都可以正常工作但我看到通过crashlytics报告了以下崩溃.我自己无法重现这一点.最让我担心的是,我没有在崩溃的线程的堆栈跟踪中看到我的应用程序,所以我对从哪里开始调试毫无头绪.以下是崩溃报告
Thread : Crashed: com.apple.NSURLConnectionLoader
0 libsystem_kernel.dylib 0x3562cc84 __pthread_kill + 8
1 libsystem_pthread.dylib 0x356d0733 pthread_kill + 62
2 libsystem_c.dylib 0x355c4f21 abort + 108
3 libsystem_c.dylib 0x355a47eb __assert_rtn + 302
4 CFNetwork 0x22b82e45 CFURLProtocol_NS::_protocolInterface_cancelLoad() + 322
5 CFNetwork 0x22c3740f ___ZN19URLConnectionLoader27_private_ScheduleOriginLoadEPK12NSURLRequestPK20_CFCachedURLResponse_block_invoke_2 + 38
6 CFNetwork 0x22b66ccd ___ZNK19URLConnectionLoader25withExistingProtocolAsyncEU13block_pointerFvP11URLProtocolE_block_invoke + 16
7 libdispatch.dylib 0x35513bd7 _dispatch_client_callout + 22
8 libdispatch.dylib 0x3551d187 _dispatch_block_invoke$VARIANT$mp + 446
9 CFNetwork 0x22b66caf RunloopBlockContext::_invoke_block(void const*, void*) + 18
10 CoreFoundation 0x2326ab51 CFArrayApplyFunction + 36
11 CFNetwork 0x22b66b97 RunloopBlockContext::perform() + 182
12 …Run Code Online (Sandbox Code Playgroud) 我需要能够发送一个UDP消息,还收到一个以发现从iPhone网络上的SSDP设备.
我知道我需要将数据包发送到多播地址,我的HTTP请求需要看起来像这样:
M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
Man: ssdp:discover
Mx: 3
ST: "urn:schemas-upnp-org:device:InternetGatewayDevice:1"
Run Code Online (Sandbox Code Playgroud)
从阅读的文档,似乎我能做到这一切与CFNetwork的,尽管阅读(并重新读取文档)我奋力上手.任何人都可以推荐和教程或代码片段让我超过最初的学习驼峰吗?
我有CFNetwork编程指南:
http://developer.apple.com/mac/library/documentation/Networking/Conceptual/CFNetwork/CFNetwork.pdf
和Beej的网络编程指南使用互联网套接字:
谢谢
戴夫
PS
在这种情况下,我无法使用任何第三方库和框架.
当我在一段时间后打开我的应用程序时,我收到了日志:
440:CFNetwork内部错误(0xc01a:/BuildRoot/Library/Caches/com.apple.xbs/Sources/CFNetwork/CFNetwork-758.4.3/Loading/URLConnectionLoader.cpp:289)
它从未出现在过去.我的项目使用网络库AFNetworking和CocoaAsyncSocket.
为什么会发生以及如何解决?
对于IOS 9及更低版本,此方法CFReadStreamCreateForHTTPRequest(...)已弃用.
Apple的文档建议使用NSURLSession而不是这个.但是我不明白我如何重新整合与NSURLSession的Live(我使用流)一起工作的功能.
我没有看到任何由NSURLSession加载"live"的可能性.
您通过服务器的特殊URL来加载实时数据的用途是什么?
cfnetwork ×10
ios ×8
iphone ×3
objective-c ×3
ios7 ×2
macos ×2
afnetworking ×1
cfnetworking ×1
cfreadstream ×1
email ×1
ios9 ×1
netstat ×1
sigabrt ×1
ssdp ×1
ssl ×1
udp ×1
upnp ×1
webkit ×1
xcode ×1