Sprawdź, czy gniazdo jest podłączone czy nie [duplikat]

To pytanie ma już odpowiedź tutaj:

Jak znaleźć stan połączenia gniazda w C? 9 odpowiedzi

Mam aplikację, która w pewnym momencie musi wysłać dane do serwera. Najprościej byłoby zamknąć połączenie, a następnie otworzyć je ponownie, gdy chcę coś wysłać. Ale chcę utrzymać połączenie otwarte, więc kiedy chcę wysłać dane, najpierw sprawdzam połączenie za pomocą tej funkcji:

bool is_connected(int sock)
{
    unsigned char buf;
    int err = recv(sock,&buf,1,MSG_PEEK);
    return err == -1 ? false : true;
}

Złą stroną jest to, że to nie działa. Zawiesza się, gdy nie ma danych do odebrania. Co mogę zrobić? Jak mogę sprawdzić, czy połączenie jest nadal otwarte?

questionAnswers(3)

yourAnswerToTheQuestion