2010-11-02 2 views
5

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

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

Это работает довольно хорошо, но из-за nagle's algorithm мои команды ТСР буфер. Это может быть классно, но в моем случае мне нужно отправить команду как можно быстрее без каких-либо задержек.

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

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

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

ответ

9
CFDataRef socketData = CFWriteStreamCopyProperty(writeStream, kCFStreamPropertySocketNativeHandle); 
CFSocketNativeHandle handle; 
CFDataGetBytes(socketData, CFRangeMake(0, sizeof(CFSocketNativeHandle)), &handle); 
// handle now contains the same thing as CFSocketGetNative(aSocket) 
+0

Спасибо за это, мне очень помогли (14 месяцев назад ... :-)) –