[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ¿Es esto normal con la llamada 'gethostbyname()'?



On Fri, 21 Apr 2000, Francisco José Avila Bermejo wrote:
> > Estoy haciendo un programa chorra para redireccionar correo y me he encontrado
> > con una curiosidad del gethostbyname(). El caso es que siempre devuelve un
> > puntero a la misma dirección, por lo que en dos llamada sucesivas a la función
> > para resolver dos nombre, pues el segundo pisa al primero. Por lo visto no hace
> > un malloc() para reservar memoria o yo qué sé:
> 
> ¿Es esta la solución al problema?

Si. Fíjate lo que dice el info al respecto:

  "You can use `gethostbyname', `gethostbyname2' or `gethostbyaddr' to
search the hosts database for information about a particular host.  The
information is returned in a statically-allocated structure; you must
copy the information if you need to save it across calls.  You can also
use `getaddrinfo' and `getnameinfo' to obtain this information."

> Me parece algo chapuzas :-P

Ya te irás acostumbrando. Hay algunas otras funciones que requieren lo
mismo, que el programador usuario de un buffer estático. La razón puede
estar en las bibliotecas dinámicas. En Windows ocurre que puedes compilar
código contra versiones diferentes de la libc. En pocas palabras, si
compilas una dll con una versión de libc (ya, ya sé que en windows no se
llama así, pero seguro que me entendéis) metiendo una función como por
ejemplo un STRDupi mejorado, que reserva memoria dinámica, y luego en un
programa intentas hacer un free de ese puntero con otra libc, el programa
casca automáticamente, dependiendo de la libc incluso sin mensaje de error
o posibilidad de depuración.

En linux esto es menos usual, porque tienes la lib5, o la lib6, pero aun
así creo que también puede pasar entre versiones tipo 1.1.2 y 1.2.x por
ejemplo. Según lo que sé, es un problema no resuelto ni por Windows ni por
Linux.

Muchos implementadores de bibliotecas consideran las funciones que
devuelven punteros a memoria dinámica "errores graves de diseño", porque
lo único que suelen traer son problemas. Además, dando tu el espacio
evitas posibles problemas de reentrancia, aunque de eso ya se más bien
poco y es una mera suposición.
-- 
  Grzegorz Adam Hankiewicz      -            gradha@iname.com
    http://glub.ehu.es/         -     http://welcome.to/gogosoftware/

 Windows NT - Nice Trial.


Reply to: