I have a C-project that has n numbers of processors working on a kind of tree search. At any given time of the program, any of these processes may find something of interest
First of all, as other collective primitives, the MPI broadcast operation requires all processes to participate, meaning that if you want to use a collective operation, you need all processes to enter the statement. This is because the MPI broadcast primitive is doing both the sending and the receive in the same collective statement: Corresponding Receive Routine of MPI_Bcast
This abstraction usually allows non-naive implementations of the collectives, all processes can actually contribute to the broadcast. This is well explained here : http://mpitutorial.com/tutorials/mpi-broadcast-and-collective-communication/
If you want to be notified asynchronously about each value that is found, because it could contribute in some way to your algorithm, looping on each process with an asynchronous send is probably your best bet, especially if these are small values.
In your question, you seem concerned only about using a loop for listening messages. Note that you can avoid the receive loop by using MPI_ANY_SOURCE as source parameter for probing and receiving messages. This avoids the loop but only probe/receive one message so depending on what you want to do, you may want to loop until there is no more message in queue, or have something more sophisticated to guard against large number of messages preventing progress of a process.