On Sat, May 3, 2014 at 1:29 PM, Florian Westphal <fw@xxxxxxxxx> wrote: > Michael Kerrisk (man-pages) <mtk.manpages@xxxxxxxxx> wrote: >> Reinvestigating the problem, I see that I got my description of the >> behavior slightly wrong, although the fundamental problem remains. >> Here's my improved formulation: > [..] > >> Since the timeout is only checked after the arrival of each datagram, >> we can have scenarios like the following: >> >> 0. Assume a timeout of 10 (T) seconds, that vlen is 5, and the call >> is made at time X >> >> 1. First datagram arrives at time X+2. >> >> 2. Second datagram arrives at time X+4 secs >> >> 3. Third datagram arrives at time X+6 secs >> >> 4. No more datagrams arrive. >> >> In this case, the call blocks forever. It hardly seems that this could >> be intended behavior. The problem, of course is that the timeout is >> checked only after receipt of a datagram. > > Isn't that what MSG_WAITFORONE is supposed to solve? I don't think so. I understand the idea of the timeout to be: get as many datagrams as you can within a certain interval. MSG_WAITFORONE is orthogonal to that goal (you can specify MSG_WAITFORONE without an infiniite timeout, for example). Also, consider the algorithm above: if no datagrams arrive, the timeout is in effect ignored. Thanks, Michael -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/ -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html