2010-11-02 70 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

相關問題