'Confusion about select()

I'm busy with this for 2 days now and still don't understand it. What does select() do in this code?

I know that if there is an incoming connection that can be accepted, the copy.fd_array[] will contain ListenSocket but when the while loop repeats it's still there. So how do we know if a client is disconnected? What does fd_set copy contain after the select() call?

fd_set master;
FD_ZERO(&master);
FD_SET(ListenSocket, &master);

while (1)
{
    fd_set copy = master;

    select(FD_SETSIZE, &copy, NULL, NULL, NULL);

    for (int i = 0; i < FD_SETSIZE; i++)
    {    
        // If new connection
        if (FD_ISSET(ListenSocket, &copy)) 
        {
            printf("[+] New connection\n");
            // Accept connection
            SOCKET AcceptedClient = accept(ListenSocket, NULL, NULL);
            FD_SET(AcceptedClient, &master);

            // Send welcome message to client
            char buff[128] = "Hello Client!";
            send(AcceptedClient, buff, sizeof(buff), 0);
        }
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source