Co jest nie tak z poniższym kodem? Używam AsyncSocket do łączenia się z serwerem proxy SOCKS i ustawiania ustawień proxy na metodzie delegata onSocketWillConnect
. Jeśli pominę połączenia z CFReadStreamSetProperty
i CFWriteStreamSetProperty
, połączenie z gniazdem będzie przebiegać płynnie. W przeciwnym razie dostaję [Nie zatrzymuję typu] na zdekapitalizowanej instancji bez śladu stosu śledzenia (może to być związane z CFNetwork?). Czy ktoś ma pojęcie, co daje?CFStream ulega awarii po ustawieniu konfiguracji proxy SOCKS
CFDictionaryRef proxyDict = CFNetworkCopySystemProxySettings();
CFMutableDictionaryRef socksConfig = CFDictionaryCreateMutableCopy(NULL, 0, proxyDict);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyHost, CFSTR("192.168.1.148"));
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyPort, (__bridge CFNumberRef)[NSNumber numberWithInt:3129]);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion4);
// set SOCKS for read streams
CFReadStreamRef readStream = [sock getCFReadStream];
if (!CFReadStreamSetProperty(readStream, kCFStreamPropertySOCKSProxy, socksConfig)) {
CFStreamError error = CFReadStreamGetError(readStream);
NSLog(@"[SEVERE] Web Socket Read Stream Error: %ld[%ld]", error.domain, error.error);
}
// set SOCKS for write stream
CFWriteStreamRef writeStream = [sock getCFWriteStream];
if (!CFWriteStreamSetProperty(writeStream, kCFStreamPropertySOCKSProxy, socksConfig)) {
CFStreamError error = CFWriteStreamGetError(writeStream);
NSLog(@"[SEVERE] Web Socket Write Stream Error: %ld[%ld]", error.domain, error.error);
}
// Release
CFRelease(socksConfig);
CFRelease(proxyDict);
Nikt tego wcześniej nie spotkał? – LaN
Kiedy dokładnie ten kod ulega awarii? Mam podobny kod w użyciu tutaj (przy użyciu GCDAsyncSocket), który działa dobrze. Czy kod ulega natychmiastowej awarii po wywołaniu 'CFReadStreamSetProperty'? – yfrancis
Zawiesza się po uzgadnianiu SOCKS. Myślę, że ma to coś wspólnego z handshake SOCKSv4, ponieważ nie ulega awarii podczas połączenia na porcie SOCKSv5 przy użyciu tego samego kodu. – LaN