On Wed, Apr 15, 2009 at 4:45 PM, Ross Finlayson <finlay...@live555.com> wrote:
>> On Thu, Apr 9, 2009 at 9:52 AM, Ross Finlayson <finlay...@live555.com>
>> wrote:
>>>
>>>  Thanks for the suggestion; I like this.
>>>
>>>  Unless anyone sees a problem with this, I will include it in the next
>>>  release of the software.
>>
>> Hello,
>>
>> On Linux, select() is implemented above poll().
>
> What do you mean by this?
>

I mean that on Linux (and at least FreeBSD), select() is just a
wrapper around poll().

>
>>  In net/core/datagram.c
>> (linux 2.6.26 sources), in datagram_poll() you can see the lines that
>> check for readable event on the socket :
>>
>>       /* readable? */
>>        if (!skb_queue_empty(&sk->sk_receive_queue) ||
>>            (sk->sk_shutdown & RCV_SHUTDOWN))
>>                mask |= POLLIN | POLLRDNORM;
>>
>> The event is set if the socket input buffer is not empty.
>
> So what is your conclusion?  Are you implying that we should (on Unix
> systems) be using "poll()" instead of "select()", and that if we use
> "poll()", we won't need the optimization that Bryan Moore proposed? Or are
> you implying that we don't need this optimization even if we use
> "select()"??

I always use poll() on Linux because it is just a wrapper of select()
and because it does not have a limit on the number of sockets to
watch. The only problem is that it is not available on Windows.

In conclusion you should use poll() for Unix and select() for Windows.
The FIONREAD method is useless with poll()/select() under Unix because
there is no internal flag which tells the socket has events ; the
socket status is re-checked at each call.

I don't known how select() is implemented on Windows.

-- 
Aurélien Nephtali
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to