Чтение Windows Размер буфера UDP - PullRequest
0 голосов
/ 04 августа 2020

Мне сложно понять, как проверить размер буфера UDP в Windows через командную строку. Я ищу что-то похожее на команду linux "sysctl net .core.rmem_max". Мне не нужно устанавливать размер буфера UDP, мне просто нужно проверить его, чтобы выдать предупреждение, если он меньше моего рекомендуемого размера. Пока что все, на что я смотрю, указывает на установку размера буфера через реестр Windows. Кто-нибудь знает, как можно просто проверить размер буфера с помощью командной строки или C ++?

1 Ответ

1 голос
/ 04 августа 2020

Я не знаю, как это сделать из командной строки (похоже, PowerShell может это сделать), но вы должны иметь возможность сделать это на C ++ следующим образом (примечание: не проверено):

#include <iostream>
#include <WinSock2.h>
#include <Ws2tcpip.h>
#pragma comment (lib, "Ws2_32.lib")

int main ()
{
    WSADATA wsaData;
    int err = WSAStartup (MAKEWORD (2, 2), &wsaData);
    if (err != NO_ERROR)
    {
        std::cout << "WSAStartup failed with error %d\n", err;
        return 1;
    }

    SOCKET s = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET)
    {
        std::cout << "socket failed with error %d\n", WSAGetLastError ());
        return 1;
    }

    int rcvbuf_len;
    socklen_t optlen = sizeof (rcvbuf_len);

    if (getsockopt (s, SOL_SOCKET, SO_RCVBUF, &rcvbuf_len, &optlen) < 0)
    {
        std::cout << "getsockopt failed with error %d\n", WSAGetLastError ());
        return 1;
    }

    std::cout << "UDP receive buffer length = " << rcvbuf_len << " bytes\n");
}

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

...