Как отключить алгоритм nagle в iOS?
Я использую cfwritestream для чтения и записи в сокет для iOS. Мне нужно отключить алгоритм Nagle, чтобы повысить эффективность записи сокета и внести изменения, чтобы включить TCP_NODELAY, однако из журналов pcap я не вижу, чтобы алгоритм Nagle был отключен.
Ниже приведен фрагмент кода для включения опции tcp_nodelay для сокета. Это делается во время вызова wrapsocket, чтобы обернуть собственный сокет в cfsocketstream.
// Wrap socket and listen to events
if (!sock->cf_socket && !sock->cf_read_stream && !sock->cf_write_stream) {
sock->cf_socket = CFSocketCreateWithNative(kCFAllocatorDefault,
sock->fd,
kCFSocketReadCallBack | kCFSocketConnectCallBack | kCFSocketWriteCallBack | kCFSocketAcceptCallBack | kCFSocketDataCallBack,
&__CFSocketCallBack,
&socket_context);
// Don't close underlying socket
CFReadStreamSetProperty(sock->cf_read_stream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse);
CFWriteStreamSetProperty(sock->cf_write_stream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse);
// Setup a context for the streams
CFStreamClientContext streamContext = { 0, transport, NULL, NULL, NULL };
// Set the client callback for the stream
CFReadStreamSetClient(sock->cf_read_stream,
kCFStreamEventOpenCompleted | kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
&__CFReadStreamClientCallBack,
&streamContext);
CFWriteStreamSetClient(sock->cf_write_stream,
kCFStreamEventOpenCompleted | kCFStreamEventErrorOccurred | kCFStreamEventCanAcceptBytes |kCFStreamEventEndEncountered,
&__CFWriteStreamClientCallBack,
&streamContext);
int yes=1;
CFDataRef socketData = CFWriteStreamCopyProperty(sock->cf_write_stream, kCFStreamPropertySocketNativeHandle);
CFSocketNativeHandle handle;
CFDataGetBytes(socketData, CFRangeMake(0, sizeof(CFSocketNativeHandle)), &handle);
int result=setsockopt(handle, IPPROTO_TCP , TCP_NODELAY , (void *)&yes, sizeof(yes));
Пожалуйста, дайте мне знать, если я что-то упустил.