1b94b8
diff --git a/src/autoconf b/src/autoconf
1b94b8
index 3a52e6c..ff78048 100755
1b94b8
--- a/src/autoconf
1b94b8
+++ b/src/autoconf
1b94b8
@@ -68,8 +68,6 @@
1b94b8
 #	#define NOfsync
1b94b8
 #Ok	#define endpwent()
1b94b8
 #Ok	#define endgrent()
1b94b8
-#Ok	#define endhostent()
1b94b8
-#Ok	#define endservent()
1b94b8
 #Ok	#define endprotoent()
1b94b8
 #	#define h_0addr_list h_addr
1b94b8
 #Ok	#define NOpw_passwd
1b94b8
@@ -896,7 +894,7 @@ int main(){int i=0;
1b94b8
  {uid_t vuid_t;i+=vuid_t=1;}
1b94b8
  {gid_t vgid_t;i+=vgid_t=1;}
1b94b8
 #ifndef NO_COMSAT
1b94b8
- {struct hostent vhostent;i+=!(vhostent.h_addr_list=0);}
1b94b8
+ {struct addrinfo res; i+=!(res.ai_socktype=0);}
1b94b8
 #endif
1b94b8
 #ifndef NOuname
1b94b8
  {struct utsname vutsname;i+=!(*vutsname.nodename='\0');}
1b94b8
@@ -917,8 +915,6 @@ do
1b94b8
   test -z "$i3" && grepfor mode_t 'typedef int mode_t;' && i3=I
1b94b8
   test -z "$i4" && grepfor uid_t 'typedef int uid_t;' && i4=I
1b94b8
   test -z "$i5" && grepfor gid_t 'typedef int gid_t;' && i5=I
1b94b8
-  test -z "$i6" && grepfor h_addr_list '#define h_0addr_list h_addr' && i6=I
1b94b8
-  test -z "$i6" && grepfor hostent '#define h_0addr_list h_addr' && i6=I
1b94b8
   test -z "$i6" && grepfor member '#define h_0addr_list h_addr' && i6=I
1b94b8
   test -z "$i7" && grepfor utsname "#define NOuname			      \
1b94b8
 /* <sys/utsname.h> is there, but empty */" && i7=I
1b94b8
@@ -1048,8 +1044,12 @@ int main(){char a[2];
1b94b8
  {struct utsname b;uname(&b);}
1b94b8
 #endif
1b94b8
 #ifndef NO_COMSAT
1b94b8
- gethostbyname("0");getprotobyname(COMSATprotocol);endhostent();endservent();
1b94b8
- endprotoent();
1b94b8
+ {
1b94b8
+ struct addrinfo *res, hints;
1b94b8
+ memset(&hints, '\0', sizeof(hints));
1b94b8
+ if(getaddrinfo(COMSAThost,BIFF_serviceport,&hints,&res))
1b94b8
+ 	freeaddrinfo(res);
1b94b8
+ }
1b94b8
 #endif
1b94b8
  _exit(0);
1b94b8
  return 0;}
1b94b8
@@ -1103,14 +1103,9 @@ grepfor uname "\
1b94b8
 /* <sys/utsname.h> defines it, the libraries don't */"
1b94b8
 grepfor endpwent '#define endpwent()'
1b94b8
 grepfor endgrent '#define endgrent()'
1b94b8
-if grepfor gethostbyname '#define NO_COMSAT'
1b94b8
+if grepfor getaddrinfo '#define NO_COMSAT'
1b94b8
 then
1b94b8
 :
1b94b8
-else
1b94b8
-  grepfor getprotobyname '#define UDP_protocolno 17'
1b94b8
-  grepfor endhostent '#define endhostent()'
1b94b8
-  grepfor endservent '#define endservent()'
1b94b8
-  grepfor endprotoent '#define endprotoent()'
1b94b8
 fi
1b94b8
 grepfor strstr '#define SLOWstrstr' ||
1b94b8
  grepfor clock '#define SLOWstrstr'
1b94b8
@@ -1239,39 +1234,9 @@ int main(argc,argv)int argc;const char*argv[];
1b94b8
 	printf("/* Insufficient memory to perform the benchmark! */\n");
1b94b8
 #endif /* SLOWstrstr */
1b94b8
 #ifndef NO_COMSAT
1b94b8
-#ifndef UDP_protocolno
1b94b8
-     ;{ const struct protoent*p;
1b94b8
-	if(p=getprotobyname(COMSATprotocol))
1b94b8
-	 { printf("#define UDP_protocolno %d\n",p->p_proto);
1b94b8
-#else
1b94b8
-     ;{ if(1)
1b94b8
-	 {
1b94b8
-#endif
1b94b8
-	   ;{ const struct servent*serv;
1b94b8
-	      if(serv=getservbyname(COMSATservice,COMSATprotocol))
1b94b8
-		 printf("#define BIFF_serviceport \"%d\"\n",
1b94b8
-		  ntohs(serv->s_port));
1b94b8
-	    }
1b94b8
-#ifdef AF_INET
1b94b8
-	   ;{ const struct hostent*host;
1b94b8
-	      if(!strcmp("localhost",COMSAThost)&&
1b94b8
-	       (host=gethostbyname(COMSAThost))&&
1b94b8
-	       host->h_0addr_list&&host->h_addrtype==AF_INET&&
1b94b8
-	       host->h_length)
1b94b8
-	       { int j=host->h_length;
1b94b8
-		 const unsigned char*ad=(void*)host->h_0addr_list;
1b94b8
-		 printf("#define IP_localhost {");
1b94b8
-		 printf("%d",*ad++);
1b94b8
-		 while(--j)
1b94b8
-		    printf(",%d",*ad++);
1b94b8
-		 puts("}");
1b94b8
-	       }
1b94b8
-	    }
1b94b8
+#ifndef AF_INET
1b94b8
+	puts("#define NO_COMSAT");
1b94b8
 #endif /* AF_INET */
1b94b8
-	 }
1b94b8
-	else
1b94b8
-	   puts("#define NO_COMSAT");
1b94b8
-      }
1b94b8
 #endif /* NO_COMSAT */
1b94b8
      ;{ unsigned long s=(size_t)~0;int bits;
1b94b8
 	for(bits=1;s>>=1;bits++);
1b94b8
diff --git a/src/comsat.c b/src/comsat.c
1b94b8
index 9712e74..5082b16 100644
1b94b8
--- a/src/comsat.c
1b94b8
+++ b/src/comsat.c
1b94b8
@@ -27,7 +27,8 @@ static /*const*/char rcsid[]=
1b94b8
 #include "comsat.h"
1b94b8
 
1b94b8
 static int csvalid;		     /* is it turned on with a good address? */
1b94b8
-static struct sockaddr_in csaddr;
1b94b8
+static struct addrinfo cai;
1b94b8
+static struct sockaddr *csaddr;
1b94b8
 static char*cslastf,*cslgname;
1b94b8
 
1b94b8
 void setlfcs(folder)const char*folder;		/* set lastfolder for comsat */
1b94b8
@@ -62,56 +63,32 @@ void setlgcs(name)const char*name;		   /* set logname for comsat */
1b94b8
 }
1b94b8
 
1b94b8
 int setcomsat(chp)const char*chp;
1b94b8
-{ char*chad;int newvalid; struct sockaddr_in newaddr;
1b94b8
+{ char*chad;int newvalid; struct addrinfo *res, hints;
1b94b8
   chad=strchr(chp,SERV_ADDRsep);			     /* @ separator? */
1b94b8
   if(!chad&&!renvint(-1L,chp))
1b94b8
      return csvalid=0;					/* turned off comsat */
1b94b8
   newvalid=1;
1b94b8
   if(chad)
1b94b8
      *chad++='\0';				      /* split the specifier */
1b94b8
+  if(!chad||!*chp)					       /* no service */
1b94b8
+     chp=BIFF_serviceport;				/* new balls please! */
1b94b8
   if(!chad||!*chad)						  /* no host */
1b94b8
-#ifndef IP_localhost			      /* Is "localhost" preresolved? */
1b94b8
      chad=COMSAThost;					/* nope, use default */
1b94b8
-#else /* IP_localhost */
1b94b8
-   { static const unsigned char ip_localhost[]=IP_localhost;
1b94b8
-     newaddr.sin_family=AF_INET;
1b94b8
-     tmemmove(&newaddr.sin_addr,ip_localhost,sizeof ip_localhost);
1b94b8
-   }
1b94b8
-  else
1b94b8
-#endif /* IP_localhost */
1b94b8
-   { const struct hostent*host;		      /* what host?  paranoid checks */
1b94b8
-     if(!(host=gethostbyname(chad))||!host->h_0addr_list)
1b94b8
-      { bbzero(&newaddr.sin_addr,sizeof newaddr.sin_addr);
1b94b8
-	newvalid=0;			     /* host can't be found, too bad */
1b94b8
-      }
1b94b8
-     else
1b94b8
-      { newaddr.sin_family=host->h_addrtype;	     /* address number found */
1b94b8
-	tmemmove(&newaddr.sin_addr,host->h_0addr_list,host->h_length);
1b94b8
-      }
1b94b8
-     endhostent();
1b94b8
-   }
1b94b8
-  if(newvalid)						  /* so far, so good */
1b94b8
-   { int s;
1b94b8
-     if(!chad||!*chp)					       /* no service */
1b94b8
-	chp=BIFF_serviceport;				/* new balls please! */
1b94b8
-     s=strtol(chp,&chad,10);
1b94b8
-     if(chp!=chad)			       /* the service is not numeric */
1b94b8
-	newaddr.sin_port=htons((short)s);		    /* network order */
1b94b8
-     else
1b94b8
-      { const struct servent*serv;
1b94b8
-	serv=getservbyname(chp,COMSATprotocol);		   /* so get its no. */
1b94b8
-	if(serv)
1b94b8
-	   newaddr.sin_port=serv->s_port;
1b94b8
-	else
1b94b8
-	 { newaddr.sin_port=htons((short)0);		  /* no such service */
1b94b8
-	   newvalid=0;
1b94b8
-	 }
1b94b8
-	endservent();
1b94b8
-      }
1b94b8
-   }
1b94b8
+  bzero(&hints,sizeof(hints));
1b94b8
+  hints.ai_socktype=SOCK_DGRAM;
1b94b8
+  hints.ai_flags=AI_ADDRCONFIG;
1b94b8
+  if(getaddrinfo(chad,chp,&hints,&res))
1b94b8
+     newvalid=0;
1b94b8
+  
1b94b8
   onguard();				    /* update the address atomically */
1b94b8
   if(csvalid=newvalid)
1b94b8
-     tmemmove(&csaddr,&newaddr,sizeof(newaddr));
1b94b8
+   { if(csaddr)
1b94b8
+        free(csaddr);
1b94b8
+     csaddr=malloc(res->ai_addrlen);
1b94b8
+     tmemmove(csaddr,res->ai_addr,res->ai_addrlen);
1b94b8
+     tmemmove(&cai,res,sizeof(cai));
1b94b8
+     freeaddrinfo(res);
1b94b8
+   }
1b94b8
   offguard();
1b94b8
   return newvalid;
1b94b8
 }
1b94b8
@@ -132,8 +109,8 @@ void sendcomsat(folder)const char*folder;
1b94b8
    }
1b94b8
   strlcat(buf,COMSATxtrsep,linebuf);			 /* custom seperator */
1b94b8
   strlcat(buf,p,linebuf);			  /* where was it delivered? */
1b94b8
-  if((s=socket(AF_INET,SOCK_DGRAM,UDP_protocolno))>=0)
1b94b8
-   { sendto(s,buf,strlen(buf),0,(struct sockaddr*)&csaddr,sizeof(csaddr));
1b94b8
+  if((s=socket(cai.ai_family,cai.ai_socktype,cai.ai_protocol))>=0)
1b94b8
+   { sendto(s,buf,strlen(buf),0,csaddr,cai.ai_addrlen);
1b94b8
      rclose(s);
1b94b8
      yell("Notified comsat:",buf);
1b94b8
    }
1b94b8
diff --git a/src/network.h b/src/network.h
1b94b8
index d7d08f2..b09b6c4 100644
1b94b8
--- a/src/network.h
1b94b8
+++ b/src/network.h
1b94b8
@@ -1,19 +1,13 @@
1b94b8
 /*$Id: network.h,v 1.7 1997/04/02 03:15:41 srb Exp $*/
1b94b8
 
1b94b8
-#include <sys/socket.h>			/* socket() sendto() AF_INET
1b94b8
+#include <sys/socket.h>			/* socket() sendto() */
1b94b8
 					/* SOCK_DGRAM */
1b94b8
-#include <netdb.h>			/* gethostbyname() getservbyname()
1b94b8
-					/* getprotobyname() */
1b94b8
-#include <netinet/in.h>			/* htons() struct sockaddr_in */
1b94b8
+#include <netdb.h>			/* getaddrinfo() */
1b94b8
 
1b94b8
 #ifndef BIFF_serviceport
1b94b8
 #define BIFF_serviceport	COMSATservice
1b94b8
 #endif
1b94b8
 
1b94b8
-#ifndef h_0addr_list
1b94b8
-#define h_0addr_list	h_addr_list[0]		      /* POSIX struct member */
1b94b8
-#endif
1b94b8
-
1b94b8
 #ifndef NO_const      /* since network.h is outside the autoconf const check */
1b94b8
 #ifdef const		    /* loop, we need this backcheck for some systems */
1b94b8
 #undef const