[freetds] Connection timeout problem on HP-UX
ZIGLIO, Frediano, VF-IT
Frediano.Ziglio at vodafone.com
Thu Apr 12 10:50:07 EDT 2007
>
> ZIGLIO, Frediano, VF-IT wrote:
> >
> > So:
> > - if linux or hpux (freebsd?? solaris?? tru64?? sgi??) use int
> > - if win32 use u_long
> > - if possible (that is not cross compiling) do a small test (using
> > configure)
> > - give error :'(
> >
> > I don't like autoconf that much but I think I'll have to
> write some m4
> > code before release... and even backport it !!
>
> Before you do this, can you show me correct code that doesn't
> work on all
> systems? What is the "bug", exactly? Which function are we talking
> about?
>
> It's always safe to assign an int to a long. That's C.
> Endianism doesn't
> matter.
>
> If there is a function that is defined differently in
> different OS's (e.g.
> getservbyname_r) then we might need an m4 file for it, if
> autoconf doesn't
> already handle it.
>
> I prefer to write correct code not obscured by preprocessor macros.
> Sometimes we can include documented patches in the
> distribution for broken
> OS's.
>
The function is ioctl (fcntl have similar issues). This function is
declared something like
int ioctl(int fd, int req, ...);
(the "..." is C code!)
now, if req is FIONBIO "..." type is a "const int *" or a "const long
int *" (depending on system platform) so the "unsafe cast" is "const
int*" <-> "const long int*". Using a big endian machine with long
(64bit) while system expect int (32bit) cause non-blocking request to
become a blocking request.
Oh... I forgot one point:
- if sizeof(int) == sizeof(long) use int
- if linux or hpux (freebsd?? solaris?? tru64?? sgi??) use int
- if win32 use u_long
- if possible (that is not cross compiling) do a small test (using
configure)
- give error :'(
Frediano
More information about the FreeTDS
mailing list