下面的代码有什么问题?我使用AsyncSocket连接到SOCKS代理,并在onSocketWillConnect委托(delegate)方法上设置代理设置。如果我省略对CFReadStreamSetPropertyCFWriteStreamSetProperty的调用,则套接字连接将顺利进行。否则,我在一个没有可跟踪堆栈跟踪的已释放实例上得到了一个“非类型保留”(可能与CFNetwork有关?)。有谁知道给什么?

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);

最佳答案

从CFReadStream的文档中:


onSocketWillConnect可能为时已晚,无法设置这些属性。

关于objective-c - 设置SOCKS代理配置后CFStream崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12070493/

10-12 00:26
查看更多