Пакет отправки CFStream Socket не завершен в IOS 7.0
Я использую CFStream Socket для отправки данных на хост. Первая отправка - это работа. Но после первого, данные, возвращаемые хостом, всегда будут обработаны. Например:
Первый раз отправить:
Sender: <11223344 55667788>
Recver: <11223344 55667788>
ладно это хорошо
второй раз, третий раз...
Sender: <11223344 55667788>
Recver: <11>
Recver: <223344 55667788>
Этот симптом произошел только в IOS 7.0. Нет этого симптома в 6.0, 5.0...
enter code here
CFReadStreamRef inputStream;
CFWriteStreamRef outputStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)_owner.ip, _owner.port, &inputStream, &outputStream);
NSDictionary *sslSettings = @{(id)kCFStreamSSLValidatesCertificateChain: (id)kCFBooleanFalse};
CFReadStreamSetProperty(inputStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelTLSv1);
CFReadStreamSetProperty(inputStream, kCFStreamPropertySSLSettings, (__bridge CFTypeRef)(sslSettings));
CFWriteStreamSetProperty(outputStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelTLSv1);
CFWriteStreamSetProperty(outputStream, kCFStreamPropertySSLSettings, (__bridge CFTypeRef)(sslSettings));
_inputStream = (__bridge_transfer NSInputStream *)inputStream;
[_inputStream setDelegate:self];
[_inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
_outputStream = (__bridge_transfer NSOutputStream *)outputStream;
[_outputStream setDelegate:self];
[_outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[_inputStream open];
[_outputStream open];
Спасибо
1 ответ
Это похоже на технику разделения 1 / n-1 для смягчения атак BEAST. http://threatpost.com/apple-turns-on-safari-beast-attack-mitigation-by-default-in-os-x-mavericks/102804
Ваш сервер, вероятно, поддерживает только TLS 1.0. Если вы обновите свой сервер для поддержки TLS 1.2, я думаю, iOS перестанет это делать.