Я использую следующий код, чтобы открыть поток, который отправляет файлы на FTP. то, что мне нужно, это получить сокет из этого, чтобы я мог реализовать второй код, размещенный здесь.get socket from Stream
self.networkStream = CFBridgingRelease(
CFWriteStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) url)
);
assert(self.networkStream != nil);
if ([usernameText length] != 0) {
success = [self.networkStream setProperty:usernameText forKey:(id)kCFStreamPropertyFTPUserName];
assert(success);
success = [self.networkStream setProperty:passwordText forKey:(id)kCFStreamPropertyFTPPassword];
assert(success);
}
self.networkStream.delegate = self;
[self.networkStream setProperty:(id)kCFBooleanFalse forKey:(id)kCFStreamPropertyFTPAttemptPersistentConnection];
[self.networkStream setProperty:(id)kCFBooleanTrue forKey:(id)kCFStreamPropertyShouldCloseNativeSocket];
[self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.networkStream open];
.
CFSocketRef cfsock = [sock getCFSocket];
CFSocketNativeHandle rawsock = CFSocketGetNative(cfsock);
int flag = 1;
int result = setsockopt(rawsock, IPPROTO_TCP, TCP_NODELAY,
(char *)&flag, sizeof(int));
if (result != 0)
NSLog(@\"Could Not Disable Nagle...\");
else
NSLog(@\"Nagle Is Disabled.\");
второй блок требует гнездо для того, чтобы быть выполнена и у меня есть только поток и не знают, как получить гнездо из потока.
благодаря
жаль, что я довольно зеленый на этом .. вы могли бы привести пример? спасибо за помощь! – sharkyenergy
спасибо, продолжайте получать "cannt disable nagle" .. любая идея почему? спасибо за вашу помощь, очень ценю это. – sharkyenergy
Проверьте, не работает ли rawsock> 0. Если нет, вы открыли свой сетевой поток перед вызовом CFWriteStreamCopyProperty? Родственный сокет может не выделяться до тех пор. – jatoben