Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Perl needs an Errno.pm for h_errno #9772

Open
p5pRT opened this issue Jun 21, 2009 · 6 comments
Open

Perl needs an Errno.pm for h_errno #9772

p5pRT opened this issue Jun 21, 2009 · 6 comments

Comments

@p5pRT
Copy link

p5pRT commented Jun 21, 2009

Migrated from rt.perl.org#66804 (status was 'open')

Searchable as RT66804$

@p5pRT
Copy link
Author

p5pRT commented Jun 21, 2009

From tlhackque@yahoo.com

Created by tlhackque@yahoo.com

The gethost* (e.g. gethostbyaddr) functions document that "if h_errno
is supported by C, h_errno is returned in $? if a call fails." This is
repeated in the documentation for $?.

I would like to ascribe meaning to the returned value. But I have been
unable to find symbolic values (e.g. from C's netdb.h) such as TRY_AGAIN
and HOST_NOT_FOUND defined in Perl. Nor a hstrerror() equivalent.

This makes it rather difficult to write portable scripts that check for
and report netdb errors for humans.

There is some discussion of this in​:
  http​://www.perlmonks.org/index.pl?node_id=773351
The suggestion there is to extract the values (in a very fragile manner)
from netdb.h at runtime.

I believe that this belongs in the core - either as an extension to
Error.pm or as a parallel mechanism.

Please consider adding this support. (Or, if I've missed an existing
capability, I'd appreciate a pointer. And the documentation for the
gethost* functions & $? should get that pointer as well!)

Thanks.

Perl Info

Flags:
    category=core
    severity=medium

This perlbug was built using Perl v5.8.8 in the Red Hat build system.
It is being executed now by Perl v5.8.8 - Mon Nov 12 21:35:26 EST 2007.

Site configuration information for perl v5.8.8:

Configured by Red Hat, Inc. at Mon Nov 12 21:35:26 EST 2007.

Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
  Platform:
    osname=linux, osvers=2.6.9-55.0.9.elsmp, archname=i386-linux-thread-multi
    uname='linux hs20-bc2-2.build.redhat.com 2.6.9-55.0.9.elsmp #1 smp tue sep 25 02:16:15 edt 2007 i686 i686 i386 gnulinux '
    config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Dversion=5.8.8 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux -Dvendorprefix=/usr -Dsiteprefix=/usr -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dinc_version_list=5.8.7 5.8.6 5.8.5 -Dscriptdir=/usr/bin'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
    optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/include/gdbm'
    ccversion='', gccversion='4.1.2 20070626 (Red Hat 4.1.2-13)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
    perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    libc=/lib/libc-2.5.so, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.5'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -L/usr/local/lib'

Locally applied patches:
    


@INC for perl v5.8.8:
    /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.8
    /usr/lib/perl5/site_perl/5.8.7
    /usr/lib/perl5/site_perl/5.8.6
    /usr/lib/perl5/site_perl/5.8.5
    /usr/lib/perl5/site_perl
    /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.8
    /usr/lib/perl5/vendor_perl/5.8.7
    /usr/lib/perl5/vendor_perl/5.8.6
    /usr/lib/perl5/vendor_perl/5.8.5
    /usr/lib/perl5/vendor_perl
    /usr/lib/perl5/5.8.8/i386-linux-thread-multi
    /usr/lib/perl5/5.8.8
    .


Environment for perl v5.8.8:
    HOME=/root
    LANG=en_US.UTF-8
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/bin:/usr/bin:/home/litt/www/./../bin
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Jun 21, 2009

From tlhackque@yahoo.com

Here is my interim solution - perhaps it will inspire someone to do it
right.

'Right' means that the database should be built at configure time, like
Errno.pm & that the list of symbols should come from the system, not be
built-in to the .pm. And it should be distributed with the core.

Nonetheless, this interim solution is probably quite usable for many
environments...

Enjoy.

@p5pRT
Copy link
Author

p5pRT commented Jun 21, 2009

From tlhackque@yahoo.com

Herrno.pm

@p5pRT
Copy link
Author

p5pRT commented Jun 21, 2009

tlhackque@yahoo.com - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2009

From @rgs

2009/6/21 via RT <perlbug-followup@​perl.org>​:

The gethost* (e.g. gethostbyaddr) functions document that "if h_errno
is supported by C, h_errno is returned in $? if a call fails."  This is
repeated in the documentation for $?.

I would like to ascribe meaning to the returned value.  But I have been
unable to find symbolic values (e.g. from C's netdb.h) such as TRY_AGAIN
and HOST_NOT_FOUND defined in Perl.  Nor a hstrerror() equivalent.

This makes it rather difficult to write portable scripts that check for
and report netdb errors for humans.

There is some discussion of this in​:
  http​://www.perlmonks.org/index.pl?node_id=773351
The suggestion there is to extract the values (in a very fragile manner)
from netdb.h at runtime.

I believe that this belongs in the core - either as an extension to
Error.pm or as a parallel mechanism.

Please consider adding this support.  (Or, if I've missed an existing
capability, I'd appreciate a pointer.  And the documentation for the
gethost* functions & $? should get that pointer as well!)

Those constants can probably be added to POSIX.pm.

@p5pRT
Copy link
Author

p5pRT commented Jun 22, 2009

From tlhackque@yahoo.com

It's not just the constants, but also a mechanism to turn them (portably)  into strings.
 
E.G. Errno.pm / $! is to errno as what's missing is to h_errno.  The code that I posted is one - not very elegant - approach.  It provides both constants and a means to get from the constants to strings.
 


This communication may not represent my employer's views,
if any, on the matters discussed.

--- On Mon, 6/22/09, Rafael Garcia-Suarez via RT <perlbug-followup@​perl.org> wrote​:

From​: Rafael Garcia-Suarez via RT <perlbug-followup@​perl.org>
Subject​: Re​: [perl #66804] Perl needs an Errno.pm for h_errno
To​: tlhackque@​yahoo.com
Date​: Monday, June 22, 2009, 11​:37 AM

2009/6/21 via RT <perlbug-followup@​perl.org>​:

The gethost* (e.g. gethostbyaddr) functions document that "if h_errno
is supported by C, h_errno is returned in $? if a call fails."  This is
repeated in the documentation for $?.

I would like to ascribe meaning to the returned value.  But I have been
unable to find symbolic values (e.g. from C's netdb.h) such as TRY_AGAIN
and HOST_NOT_FOUND defined in Perl.  Nor a hstrerror() equivalent.

This makes it rather difficult to write portable scripts that check for
and report netdb errors for humans.

There is some discussion of this in​:
  http​://www.perlmonks.org/index.pl?node_id=773351
The suggestion there is to extract the values (in a very fragile manner)
from netdb.h at runtime.

I believe that this belongs in the core - either as an extension to
Error.pm or as a parallel mechanism.

Please consider adding this support.  (Or, if I've missed an existing
capability, I'd appreciate a pointer.  And the documentation for the
gethost* functions & $? should get that pointer as well!)

Those constants can probably be added to POSIX.pm.

 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants