如何在iPhone上的TCP连接上禁用Nagle算法

时间:2010-06-30 09:41:20

标签: iphone sockets tcp nsstream

我正在构建一个套接字,使用


CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
                                       (CFStringRef) yourHostAsNSString,
                                       yourPortAsInteger,
                                       &myReadStream,
                                       &myWriteStream);
我发现当我用“myWriteStream”发送消息时,它会将几条消息连接在一起,然后发送它们。 我认为这是因为Nagle算法,我想禁用它。 有谁知道怎么做?

1 个答案:

答案 0 :(得分:6)

不保证这会解决您的问题,但如果您想要禁用Nagle算法,则需要从流中获取本机套接字并调用setsockopt

CFDataRef nativeSocket = CFWriteStreamCopyProperty(myWriteStream, kCFStreamPropertySocketNativeHandle);
CFSocketNativeHandle *sock = (CFSocketNativeHandle *)CFDataGetBytePtr(nativeSocket);
setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, &(int){ 1 }, sizeof(int));
CFRelease(nativeSocket);

(向迈克阿什喊出compound literal伎俩。)