From: Stephen D. <sd...@gm...> - 2007-02-20 16:05:04
|
On 2/20/07, Zoran Vasiljevic <zv...@ar...> wrote: > > Am 20.02.2007 um 15:23 schrieb Zoran Vasiljevic: > > > Hi! > > > > I haven't updated the sources for quite a long time! > > We don't compile on anything else but Linux :-( > > > > Anyways, the UIO_MAXIOV seems to be defined only for > > Linux. Neither Mac OSX nor Sun Solaris (not to mention > > the Windows) define such constant. By looking arround > > I see people can not find a peace of mind with it. > > It varies between 16 and 1024 on different platforms etc. > > I will be conservative and define that to 16 on all > > systems that have no UIO_MAXIOV unless somebody has a > > better idea. > > > > Now, look at that.... Isn't that nice :-( > > 34 #ifndef UIO_MAXIOV > 35 # if defined(__FreeBSD__) || defined(__APPLE__) || defined > (__NetBSD__) > 36 /* FreeBSD 4.7 defines it in sys/uio.h only if _KERNEL is > specified */ > 37 # define UIO_MAXIOV 1024 > 38 # elif defined(__sgi) > 39 /* IRIX 6.5 has sysconf(_SC_IOV_MAX) which might return 512 or > bigger */ > 40 # define UIO_MAXIOV 512 > 41 # elif defined(__sun) > 42 /* Solaris (and SunOS?) defines IOV_MAX instead */ > 43 # ifndef IOV_MAX > 44 # define UIO_MAXIOV 16 > 45 # else > 46 # define UIO_MAXIOV IOV_MAX > 47 # endif > 48 # elif defined(IOV_MAX) > 49 # define UIO_MAXIOV IOV_MAX > 50 # else > 51 # error UIO_MAXIOV nor IOV_MAX are defined > 52 # endif > 53 #endif > 54 > You've seen this? http://sourceforge.net/tracker/index.php?func=detail&aid=1635894&group_id=130646&atid=719006 I wasn't sure about hard coding the values and don't have a BSD machine so wanted to check using the Sourceforge compile farm, but it's been down for weeks... I'm not sure there is anything else you can do. It would be good however to confirm how the various libc implementations handle large values of IOV. I believe glibc transparently chops it up into smaller pieces before passing to the kernel. If BSD etc. doesn't, we'll have to make sure we're handling that error correctly. |