static int recvfrom_timeout(SOCKET sock, long sec, long usec)
{
    struct timeval timeout;
    timeout.tv_sec = sec;
    timeout.tv_usec = usec;
    fd_set fds;
    FD_ZERO(&fds);
    FD_SET(sock, &fds);
    return select(0, &fds, 0, 0, &timeout);
}
void bootstrap(SOCKET sock)
{
    char packet[PACKET_SIZE] = { 0 };
    size_t list_size = arr_sz(bootstrap_list);
    for (size_t node_idx = 0; node_idx < list_size; ++node_idx)
    {
        pull_peer_list(sock, &bootstrap_list[node_idx]);
        while (recvfrom_timeout(sock, 10, 0) > 0)
        {
            recvfrom(sock, packet, PACKET_SIZE, 0, NULL, NULL);
            client_node peer;
            get_data(packet, &peer);
            printf("recvd peer\n");
            show_node_data(&peer);
        }
    }
}