2010-11-02 75 views
5

我创建使用CFStreamCreatePairWithSocketToHost这样得到的写入流套接字的TCP连接(我不想准备任何数据):有没有办法通过使用CFStreamCreatePairWithSocketToHost()获取套接字引用?

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

这工作得很好,但因为nagle's algorithm我的TCP命令进行缓冲。这可能很酷,但在我的情况下,我需要尽快发送命令而不会有任何延迟。

我找到了一种方法来禁用这个“功能”使用下面的代码中发现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个月前... :-)) – 2012-02-06 07:42:43

相关问题