6

を使用して socket を構築しています


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 に答える