2012-08-22 25 views
7

Aşağıdaki kodun nesi yanlış? Bir SOCKS proxy'sine bağlanmak ve onSocketWillConnect temsilci yönteminde proxy ayarlarını yapmak için AsyncSocket kullanıyorum. Çağrıları CFReadStreamSetProperty ve CFWriteStreamSetProperty numaralı telefonlara vermezseniz, soket bağlantısı sorunsuz bir şekilde devam edecektir. Else, izlenebilir bir yığın izlemesi olmayan ayrılmış bir örnekte [Not A Type a dectain] alıyorum (CFNetwork ilgili olabilir?). Neyin verdiği hakkında bir fikri olan var mı? CFReadStream belgelenmesi itibarenCFStream SOCKS proxy yapılandırmasını ayarladıktan sonra çöküyor

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

Daha önce hiç kimse bununla karşılaştı mı? – LaN

+0

Bu kod ne zaman tam olarak kilitleniyor? Burada çalışan (GCDAsyncSocket kullanarak) benzer kodları var. CFReadStreamSetProperty' çağırdığınızda kod hemen çöküyor mu? – yfrancis

+0

SOCKS el sıkışmasından sonra çöküyor. Aynı kodu kullanarak bir SOCKSv5 portuna bağlanırken çökmemesi nedeniyle SOCKSv4 el sıkışma ile ilgili bir şey olduğunu düşünüyorum. – LaN

cevap

1

: akışının davranışını yapılandırmak ve yalnızca bu tür akışı açılmış eskisi gibi belirli zamanlarda, değiştirilebilir olabilir ayarlanabilir

Özellikleri. (Aslında, aksi belirtilmediği sürece, sadece akışı açmadan önce özelliklerini ayarlayabilirsiniz varsaymalısınız.)

onSocketWillConnect bu özellikleri ayarlamak için çok geç olabilir.

+0

Evet, soket akışı özellikleri açılmadan önce ayarlanmalıdır (mümkün olduğunca). Ancak durum böyle değildir, metodun ismine göre 'onSocketWillConnect' _before_ soketi açılmıştır. [AsyncSocket Kaynağı] (https://github.com/lanavelino/CocoaAsyncSocket/blob/master/RunLoop/AsyncSocket.m) – LaN