On Fri, 31 Mar 2006, Niall Douglas wrote:
How do I receive UDP packets using recvfrom() when it would seem that
recvfrom() is not a thread cancellation point on FreeBSD 6.0?
1) select() or poll() instead, then recvfrom(). UDP packets
are never partial IIRC.
2) Unmask a signal in the thread doing the recvfrom(), then
use pthread_kill() to interrupt it (don't use SA_RESTART
for sa_flags in the signal action).
Is there an alternative method of receiving UDP packets which is
thread cancellable? The best I can see is using plain read() but this
of course won't return the sender of the UDP packet.