Cosa c'è di sbagliato nel codice qui sotto? Uso AsyncSocket per connettersi a un proxy SOCKS e impostare le impostazioni del proxy sul metodo delegato onSocketWillConnect
. Se ometto le chiamate a CFReadStreamSetProperty
e CFWriteStreamSetProperty
, la connessione socket procederà senza intoppi. Altrimenti, ottengo [Not A Type retain] su un'istanza deallocata senza traccia tracciabile dello stack (Potrebbe trattarsi di CFNetwork?). Qualcuno ha qualche idea di ciò che dà?CFStream si blocca dopo aver impostato la configurazione del 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);
Nessuno lo ha mai incontrato prima? – LaN
Quando si blocca esattamente questo codice? Ho un codice simile in uso qui (usando GCDAsyncSocket) che funziona bene. Il codice si arresta immediatamente quando si chiama 'CFReadStreamSetProperty'? – yfrancis
Si blocca dopo l'handshake SOCKS. Penso che abbia qualcosa a che fare con l'handshake SOCKSv4 poiché non si blocca quando si connette su una porta SOCKSv5 usando lo stesso codice. – LaN