Search code examples
c++windowsudpbuffercommand-prompt

Read Windows UDP Buffer Size


I'm finding difficulty figuring out how to check the UDP Buffer size in Windows via Command Prompt. I am looking for something similar to the linux command "sysctl net.core.rmem_max". I do not need to set the UDP buffer size, I just need to check it in order to throw a warning if it is smaller than my recommended size. So far every where I seem to look points towards setting the buffer size through the Windows Registry. Does anyone know of a possible way to simply check the buffer size through a Command Prompt or C++?


Solution

  • I don't know how to do this from the command line (looks like PowerShell can do it), but you should be able to do this in C++ as follows (note: untested):

    #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::cerr << "WSAStartup failed with error " << err << "\n";
            return 1;
        }
    
        SOCKET s = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        if (s == INVALID_SOCKET)
        {
            std::cerr << "socket failed with error " << WSAGetLastError () << "\n"
            return 1;
        }
    
        int rcvbuf_len;
        socklen_t optlen = sizeof (rcvbuf_len);
    
        if (getsockopt (s, SOL_SOCKET, SO_RCVBUF, &rcvbuf_len, &optlen) < 0)
        {
            std::cerr << "getsockopt failed with error " << WSAGetLastError () << "\n";
            return 1;
        }
    
        std::cout << "UDP receive buffer length = " << rcvbuf_len << " bytes\n");
    }
    

    We don't need to clean up any resources here as that will happen automatically when the program exits.