A problem with the select(2) interface

M. Warner Losh imp at bsdimp.com
Wed May 23 03:00:29 UTC 2007


In message: <20070517094445.GD1149 at turion.vk2pj.dyndns.org>
            Peter Jeremy <peterjeremy at optushome.com.au> writes:
: On 2007-May-16 15:23:14 +0200, Dag-Erling Smrgrav <des at des.no> wrote:
: >MQ <antinvidia at gmail.com> writes:
: >> No, that is not what I want. I think we'd better add a comments that
: >> we *DO NOT WRITE TO THAT ADDRESS*, what the manual describes is that
: >> there may be some platforms which write to that address. It's not the
: >> same thing.
: >
: >Some platforms update the timeval and some don't, so portable
: >applications must simply assume that its contents are undefined after
: >the select(2) call.  It can not be relied on to contain either the
: >initial value nor the amount of time remaining.  Thus your proposed
: >change is pointless.
: 
: I disagree.  The FreeBSD man pages should document the behaviour of
: FreeBSD.  It's all very nice stating that SUSv2 allows a system to
: modify the value passed as timeout but (IMNSHO), it is more important
: to document what FreeBSD actually does.
: 
: I agree that a _portable_ application must assume that timeout will
: be undefined but that's no reason for refusing to document what
: FreeBSD's behaviour actually is.
: 
: There are two situations where the actual behaviour matters:
: 1) Porting a random application that assumes specific behaviour for
:    select().  I need to know how FreeBSD behaves to know whether I
:    need to patch the code or not.
: 2) I'm writing code that is specifically for FreeBSD.  If I know
:    timeout will not change, I can optimise the code to avoid having to
:    re-initialise timeout before each select call.

Index: select.2
===================================================================
RCS file: /cache/ncvs/src/lib/libc/sys/select.2,v
retrieving revision 1.33
diff -u -r1.33 select.2
--- select.2	9 Jan 2007 00:28:15 -0000	1.33
+++ select.2	23 May 2007 03:00:14 -0000
@@ -222,3 +222,6 @@
 by the
 .Fn select
 system call.
+.Fx 
+does not modify the return value, which can cause problems for applications
+ported from other systems.


More information about the freebsd-arch mailing list