6

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


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

4

1 回答 1

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

(向 Mike Ash 喊出复合字面技巧。)

于 2011-05-02T16:27:50.023 回答