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

gke*_*dmi 6 sockets iphone tcp nsstream

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


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

Ste*_*sen 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);
Run Code Online (Sandbox Code Playgroud)

(向迈克阿什喊出复合字诀.)

  • 对于TCP_NODELAY定义,我必须`#import <netinet/tcp.h>`.你当然可以在那里取决于你正在做的其他事情. (3认同)