Есть ли способ получить ссылку на сокет с помощью CFStreamCreatePairWithSocketToHost ()? - PullRequest
6 голосов
/ 03 ноября 2010

Я создаю TCP-соединение с сокетом, используя CFStreamCreatePairWithSocketToHost, чтобы получить поток записи (я не хочу готовить какие-либо данные):

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)host, port, NULL, &writeStream);

Это работает довольно хорошо, но из-за алгоритм nagle мои команды tcp буферизируются.Это может быть круто, но в моем случае мне нужно отправить команду как можно быстрее без каких-либо задержек.

Я нашел способ отключить эту «функцию», используя следующий найденный код здесь :

int yes = 1;
setsockopt(CFSocketGetNative(aSocket), IPPROTO_TCP, TCP_NODELAY, (void *)&yes, sizeof(yes));

, но я не могу понять, как получить действительную ссылку намоя розетка.Вы можете мне помочь?

1 Ответ

10 голосов
/ 03 ноября 2010
CFDataRef socketData = CFWriteStreamCopyProperty(writeStream, kCFStreamPropertySocketNativeHandle);
CFSocketNativeHandle handle;
CFDataGetBytes(socketData, CFRangeMake(0, sizeof(CFSocketNativeHandle)), &handle);
// handle now contains the same thing as CFSocketGetNative(aSocket)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...