recvfrom() not a thread cancellation point
Daniel Eischen
deischen at freebsd.org
Fri Mar 31 21:00:48 UTC 2006
On Fri, 31 Mar 2006, Niall Douglas wrote:
> On 31 Mar 2006 at 15:40, Daniel Eischen 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.
>
> Ah, that's a good idea.
>
> > 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).
>
> Not practical unfortunately as who knows how many threads are
> concurrently doing recvfrom()'s.
If you know how to cancel a particular thread, then you know
how to send a signal to a particular thread (pthread_kill(tid, sig)).
> Thanks for the hint. I hadn't thought of using poll.
--
DE
More information about the freebsd-threads
mailing list