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      -            [EMAIL PROTECTED]
    http://glub.ehu.es/         -     http://welcome.to/gogosoftware/

 Windows NT - Nice Trial.

Responder a