Как отключить алгоритм Nagle на Unix Socket на C языке? - PullRequest
2 голосов
/ 30 марта 2020

Я хочу отключить алгоритм Нейгла в моем Unix сокете, возможно ли это?

Поскольку все, что я могу найти в руководствах по отключению, это только для сокета TCP. Это мой unix код инициализации сокета.

    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)
         // ...

1 Ответ

4 голосов
/ 30 марта 2020

Алгоритм Nagle является алгоритмом TCP / IP, определяемым c, который используется для уменьшения издержек пакета. В сокете UNIX не задействован протокол TCP / IP, и, следовательно, алгоритм Nagle не может быть применен там. Что также означает, что его нельзя отключить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...