[Windows] Socket Server Failed to bind, error 10048

Addresses that are already in use.
Normally, each socket address (protocol/IP address/port) is allowed to be used only once.
This error occurs if the application tries to bind a socket to an IP address/port that is already in use for an existing socket, or a socket that is not properly closed, or is still in the process of being closed.
For server applications that need to bind multiple sockets to the same port number, such as when a client process is taskkill and starts again, consider using setsockopt (SO_REUSEADDR).
Client applications usually do not need to call bind-connect to automatically select an unused port. When calling bind with a wildcard address (including ADDR_ANY), the WSAEADDRINUSE error may be delayed until a specific address is committed. This may occur later when another function is called, including connect, listen, WSAConnect, or WSAJoinLeaf.

        BOOL bOptVal = TRUE;
        int bOptLen = sizeof(BOOL);
        iResult = setsockopt(ListenSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&bOptVal, bOptLen);
        if (iResult == SOCKET_ERROR)
        {
            char m[500];
            snprintf(m, 500, "%s %d: setsockopt failed, port %d failed with error: %d",
                __func__, __LINE__, port_number, WSAGetLastError());
            printf("%s\n", m);
            freeaddrinfo(result);
            closesocket(ListenSocket);
            WSACleanup();
            return -1;
        }

https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-setsockopt

Reproduced in: https://www.cnblogs.com/liujx2019/p/10811330.html

Read More: