Получить сокет bsd от NSURLSessionStreamTask - PullRequest
0 голосов
/ 05 октября 2019

Любая идея о том, как получить скрытую розетку в NSURLSessionStreamTask?

Мы используем NSURLSessionStreamTask для связи по tcp. Мы бы хотели, чтобы базовый сокет bsd отключил алгоритм Nagel. Проблема в том, что у нас всегда есть дескриптор сокета NULL, возвращаемый из NSURLSessionStreamTask

  1. Создать NSURLSessionStream с помощью NSURLSessionStreamTask * _streamTask = [some_session streamTaskWithHostName: _hostname port: _port];

    * *
  2. Захватите пары задач, используя:

[_ streamTask captureStreams]

Открытие потоков в делегате "updateInputStream: outputStream:"
- (void)updateInputStream:(NSInputStream *)inputStream outputStream:(NSOutputStream *)outputStream {
  if (inputStream == nil || outputStream == nil) {
    return;
  }

  _inputStream = inputStream;
  _outputStream = outputStream;

  [_inputStream setDelegate:self];
  [_outputStream setDelegate:self];

  [_inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
  [_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

  [_inputStream open];
  [_outputStream open];
}

Мы можем использовать _inputStream и _outputStream для отправки / получения данных на удаленный хост.

Однако при попытке получить kCFStreamPropertySocketNativeHandle для этого _inputStream / _outputStream, NULL всегда возвращается .

CFDataRef socketData = CFWriteStreamCopyProperty((__bridge CFWriteStreamRef)_outputStream), kCFStreamPropertySocketNativeHandle);
  }

Я также пытался с _inputStream с использованием CFReadStreamCopyProperty, но все еще возвращается NULL.

Любая идея опочему NULL возвращается для потоков ввода / вывода, захваченных из NSURLSesssionStreamTask?

...