如何在GCDAsyncSocket中设置tcp_nodelay?

4

看起来标题已经很明确了。我想提高应用程序发送和接收数据的速度,有人告诉我将tcp_nodelay设置为true。但我不知道如何在GCDAsyncSocket中实现。有人可以帮助我吗?


我也在尝试做同样的事情。@Martin_R的技巧有用吗? - Jonathan
很遗憾,我无法确定它是否有帮助。似乎它至少在某种程度上有所帮助。由于一系列问题,我已经暂停了在这个方向上的工作,所以坦率地说,现在轮到我向你提供尝试并告诉我是否有帮助的解决方案)))。 - Andrey Chernukha
我会回来告诉你的,但是我需要先运行一些测试 :) 我非常确定,在写入时设置超时时间(不是-1)可以提高速度,你应该试试。 - Jonathan
非常感谢你的建议,伙计。我会等着你在这里写作,如果我先完成了,我也会写信给你。 - Andrey Chernukha
嘿,似乎没有任何区别。虽然像我之前说的将超时时间设置为20确实有效。只需确保您延长任何超时的时间。 - Jonathan
1个回答

3

我没有使用过 GCDAsyncSocket,但是 "GCDAsyncSocket.h" 显示你可以使用 socketFD 方法获取底层的 socket 描述符,必须在 performBlock: 调用中调用。所以下面的代码可能有效:

[asyncSocket performBlock:^{
    int fd = [asyncSocket socketFD];
    int on = 1;
    if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on)) == -1) {
        /* handle error */
    }
}];

您可能需要添加:

#include <netinet/tcp.h>
#include <netinet/in.h>

将此内容添加到您的源文件以进行编译。正如我所说,我没有尝试过这种方法,但或许它能够指引您朝着正确的方向前进。


这个应该在每次写入时调用还是只需要在创建套接字后调用一次? - Jonathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接