Как очистить входной буфер UDP-сокета в C?

Как очистить входной буфер (если такой вообще существует) UDP-сокета в C?

Я работаю над встроенной средой Linux и использую C для создания собственного приложения. В одной сети есть несколько таких встроенных машин, и когда на одной из них происходит событие (назовем его WHISTLE-BLOWER), WHISTLE-BLOWER должен отправить сетевое сообщение на сетевой широковещательный адрес, чтобы все машины были включены. сеть (включая WHISTLE-BLOWER) знает о событии и выполняет некоторые действия в соответствии с ним.Кстати, я использую сокет UDP ...

Вот псевдокод для этого:

main
{
    startNetworkListenerThread( networkListenerFunction );

    while( not received any SIGTERM or such )
    {
        localEventInfo = checkIfTheLocalEventOccured();
        broadcastOnNetwork( localEventInfo );
    }
}

networkListenerFunction
{
    bindSocket;

    while( not SIGTERM )
    {
// THIS IS WHERE I WANT TO FLUSH THE RECV BUFFER...
        recv_data = recvfrom( socket );
        if( validate recv data )
        {
            startExecuteLocalAction;
            sleep( 5 );
            stopExecuteLocalAction;
        }
    }
}

Как яожидать и хотеть для работы этот код:

1. LOCAL_EVENT occured
2. Broadcasted LOCAL_EVENT_INFO on network
3. All machines received EVENT_INFO, including the original broadcaster
4. All machines started executing the local action, including the original broadcaster
5. All machines' network listener(thread)s are sleeping
6. Another LOCAL_EVENT2 occured
7. Since all machines' listener are sleeping, LOCAL_EVENT2 is ignored
8. All machines' network listener(thread)s are now active again
9. GO BACK TO 1 / RESTART CYCLE
RESULT = TOTAL 2 EVENTS, 1 IGNORED

Как это работает на самом деле:

1. LOCAL_EVENT occured
2. Broadcasted LOCAL_EVENT_INFO on network
3. All machines received EVENT_INFO, including the original broadcaster
4. All machines started executing the local action, including the original broadcaster
5. All machines' network listener(thread)s are sleeping
6. Another LOCAL_EVENT2 occured
7. Eventhough all machines' listener are sleeping; LOCAL_EVENT2 is queued  SOMEHOW
8. All machines' network listener(thread)s are now active again
9. All machines received EVENT_INFO2 and executed local actions again, slept and reactivated
10. GO BACK TO 1 / RESTART CYCLE
RESULT = TOTAL 2 EVENTS, 0 IGNORED

tl, dr: пакеты / сообщения / UDP-широковещательные рассылки, отправленные в уже связанный сокет, родительский поток которого спит в момент доставки; каким-то образом ставятся в очередь / помещаются в буфер и доставляются при следующем вызове recvfrom на указанном сокете.

Я хочу, чтобы эти широковещательные рассылки UDP игнорировались, поэтому я думал об очистке буфера приема (очевидно, не того, который я передаю в качестве параметра методу recvfrom), если он существует до вызова recvfrom. Как я могу это сделать? или по какому пути мне идти?

Ответы на вопрос(2)

Ваш ответ на вопрос