有没有办法通过使用CFStreamCreatePairWithSocketToHost()来获取套接字引用?

时间:2010-11-02 22:32:26

标签: iphone objective-c tcp

我正在使用这样的CFStreamCreatePairWithSocketToHost创建套接字tcp连接来获取写入流(我不想准备任何数据):

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));

但是我无法弄清楚如何获得对套接字的有效引用。你能救我吗?

1 个答案:

答案 0 :(得分:10)

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