【问题标题】:How to disable Nagle algorithm on Unix Socket in C language?如何在 C 语言中禁用 Unix Socket 上的 Nagle 算法?
【发布时间】:2020-07-10 16:20:54
【问题描述】:

我想在我的 Unix Socket 中禁用 Nagle 算法,可以吗?

因为我可以在教程中找到禁用它的所有内容仅适用于 TCP 套接字。这是我的unix socket初始化代码。

    struct sockaddr_un local, remote;
    u8 str[0xFFFF];
    struct client_info cl;

    if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
    {
        perror("socket");
        exit(1);
    }

    local.sun_family = AF_UNIX;
    strcpy(local.sun_path, SOCK_PATH);
    unlink(local.sun_path);
    len = strlen(local.sun_path) + sizeof(local.sun_family);
    if (bind(s, (struct sockaddr *)&local, len) == -1)
    {
        perror("bind");
        exit(1);
    }

    if (listen(s, 5) == -1)
    {
        perror("listen");
        exit(1);
    }

这是我发现禁用 nagle 算法的代码,但我不知道将它应用于我的 unix 套接字的参数。

int result = setsockopt(sock,            /* socket affected */
                                 IPPROTO_TCP,     /* set option at TCP level */
                                 TCP_NODELAY,     /* name of option */
                                 (char *) &flag,  /* the cast is historical
                                                         cruft */
                                 sizeof(int));    /* length of option value */
         if (result < 0)
         // ...

【问题讨论】:

  • 假设这是可能的(正如已经指出的,它不是),你希望通过这样做来完成什么?
  • 因为我在使用 recv() 接收时有些延迟

标签: c linux sockets unix tcp


【解决方案1】:

Nagle 算法是一种用于减少数据包开销的 TCP/IP 特定算法。 UNIX 套接字中不涉及 TCP/IP,因此不能在其中应用 Nagle 算法。这也意味着它不能被禁用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2013-07-24
    • 2016-02-08
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多