¿Qué pasa con el código siguiente? Yo uso AsyncSocket para conectarme a un proxy SOCKS y establezco la configuración del proxy en el método delegado onSocketWillConnect
. Si omito las llamadas a CFReadStreamSetProperty
y CFWriteStreamSetProperty
, la conexión del socket se realizará sin problemas. De lo contrario, obtengo un [Not A Type reten] en una instancia desasignada sin rastro de pila rastreable (¿Podría estar relacionado con CFNetwork?). ¿Alguien tiene alguna idea de lo que da?CFStream falla después de configurar SOCKS proxy config
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);
¿Nadie ha encontrado esto antes? – LaN
¿Cuándo se bloquea exactamente este código? Tengo un código similar en uso aquí (usando GCDAsyncSocket) que funciona bien. ¿El código se bloquea inmediatamente cuando llamas a 'CFReadStreamSetProperty'? – yfrancis
Se cuelga después del saludo de SOCKS. Creo que tiene algo que ver con el intercambio de información de SOCKSv4, ya que no se cuelga cuando se conecta en un puerto SOCKSv5 con el mismo código. – LaN