iOS 앱에는 서버와 클라이언트의 두 가지 버전이 있습니다. 서버는 Bonjour를 통해 서비스를 게시하고 클라이언트를 기다립니다. 클라이언트는 서비스를 검색하고 서버에 연결합니다. 그 후 모든 통신은 CFSockets을 통해 구현됩니다.
는 다음과 같은 통신 스트림을 설정하는 내 코드 :이 코드에서 SSL을 돌리면 잘 작동 부분없이CFStream SSL 오류 -9800
- (BOOL)setupSocketStreams {
if (readStream == nil || writeStream == nil) {
return NO;
}
incomingDataBuffer = [[NSMutableData alloc] init];
outgoingDataBuffer = [[NSMutableData alloc] init];
// Turning SSL on
NSDictionary *sslSettings = [NSDictionary dictionaryWithObjectsAndKeys:(id)kCFBooleanFalse, (id)kCFStreamSSLValidatesCertificateChain, nil];
CFReadStreamSetProperty(readStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelNegotiatedSSL);
CFReadStreamSetProperty(readStream, kCFStreamPropertySSLSettings, sslSettings);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelNegotiatedSSL);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertySSLSettings, sslSettings);
CFReadStreamSetProperty(
readStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue
);
CFWriteStreamSetProperty(
writeStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue
);
CFOptionFlags registeredEvents =
kCFStreamEventOpenCompleted |
kCFStreamEventHasBytesAvailable |
kCFStreamEventCanAcceptBytes |
kCFStreamEventEndEncountered |
kCFStreamEventErrorOccurred
;
CFStreamClientContext ctx = {
0, // version
self, // info
NULL, // retain callback
NULL, // release callback
NULL // copyDescription callback
};
CFReadStreamSetClient(
readStream,
registeredEvents,
readStreamEventHandler,
&ctx
);
CFWriteStreamSetClient(
writeStream,
registeredEvents,
writeStreamEventHandler,
&ctx
);
CFReadStreamScheduleWithRunLoop(
readStream,
CFRunLoopGetCurrent(),
kCFRunLoopCommonModes
);
CFWriteStreamScheduleWithRunLoop(
writeStream,
CFRunLoopGetCurrent(),
kCFRunLoopCommonModes
);
if (! CFReadStreamOpen(readStream) || ! CFWriteStreamOpen(writeStream)) {
[self close];
return NO;
}
if ([self.delegate respondsToSelector:@selector(establishedConnection:)]) {
[self.delegate establishedConnection:self];
}
return YES;
}
하지만 그렇지 않으면 내가지고있어 오류 :
Error:
The operation couldn’t be completed. (OSStatus error -9800.)
어떤 종류의 문제가 될 수 있습니까?
감사합니다.
여전히 같은 오류가 발생합니다. 소켓 설정 방법의 전체 목록은 http://pastebin.com/EDSnmcMd – dymv
HOLY COW. Gmail에 연결하는 중에 발생하는 오류가 수정되었다고 믿을 수 없습니다. 그걸 결코 알아 내지 못했을거야! 감사. –