我正在构建一个套接字,使用
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
(CFStringRef) yourHostAsNSString,
yourPortAsInteger,
&myReadStream,
&myWriteStream);
我发现当我用“myWriteStream”发送消息时,它会将几条消息连接在一起,然后发送它们。
我认为这是因为Nagle算法,我想禁用它。
有谁知道怎么做?
答案 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伎俩。)