как отключить алгоритм Nagle на TCP-соединении на iPhone - PullRequest
6 голосов
/ 30 июня 2010

Я строю сокет, используя

<code>
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
                                       (CFStringRef) yourHostAsNSString,
                                       yourPortAsInteger,
                                       &myReadStream,
                                       &myWriteStream);
и я вижу, что когда я отправляю сообщения с помощью «myWriteStream», он объединяет несколько сообщений вместе, а затем отправляет их. Я думаю, что это происходит из-за алгоритма Nagle, и я хочу отключить его. Кто-нибудь знает, как это сделать?

1 Ответ

6 голосов
/ 02 мая 2011

Нет гарантии, что это решит вашу проблему, но если вы хотите отключить алгоритм Nagle, вам нужно получить собственный поток из потока и вызвать setsockopt.

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

Майк Эш за составной литерал трюк.)

...