Có gì sai với mã bên dưới? Tôi sử dụng AsyncSocket để kết nối với một proxy SOCKS và thiết lập các thiết lập proxy trên onSocketWillConnect
phương thức ủy nhiệm. Nếu tôi bỏ qua các cuộc gọi đến CFReadStreamSetProperty
và CFWriteStreamSetProperty
kết nối ổ cắm sẽ hoạt động thông suốt. Khác, tôi nhận được một [Không phải là một loại giữ lại] trên một trường hợp deallocated không có dấu vết stack theo dõi (Nó có thể là CFNetwork liên quan?). Có ai có ý tưởng gì?CFStream bị treo sau khi đặt cấu hình 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);
Không ai từng gặp phải điều này trước đây? – LaN
Khi nào mã này gặp sự cố? Tôi có mã tương tự được sử dụng ở đây (sử dụng GCDAsyncSocket) mà hoạt động tốt. Mã có bị lỗi ngay lập tức khi bạn gọi 'CFReadStreamSetProperty' không? – yfrancis
Nó bị treo sau khi bắt tay SOCKS. Tôi nghĩ rằng nó có một cái gì đó để làm với SOCKSv4 bắt tay vì nó không sụp đổ khi kết nối trên một cổng SOCKSv5 bằng cách sử dụng cùng một mã. – LaN