7

以下のコードの何が問題になっていますか? onSocketWillConnectAsyncSocket を使用して SOCKS プロキシに接続し、デリゲート メソッドでプロキシ設定を設定します。との呼び出しを省略するCFReadStreamSetPropertyCFWriteStreamSetProperty、ソケット接続はスムーズに行われます。それ以外の場合、追跡可能なスタック トレースのない割り当て解除されたインスタンスで [Not A Type preserve] を取得します (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);
4

1 に答える 1

1

CFReadStream のドキュメントから:

設定できるプロパティは、ストリームの動作を構成し、ストリームが開かれる前など、特定の時点でのみ変更できる場合があります。(実際、特に明記されていない限り、ストリームを開く前にのみプロパティを設定できると想定する必要があります。)

onSocketWillConnectこれらのプロパティを設定するには遅すぎる可能性があります。

于 2012-11-22T13:04:00.957 に答える