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

[debian-users:20036] Re: mnews の起動が遅い



吉藤英明@東北大学情報科学です。


In article <200001120648.PAA13588@xxxxxxxxxxxxxxxxxxxx> (at Wed, 12 Jan 2000 15:47:19 +0900), shoji@xxxxxxxxxxxxxxxxxxxx says:

> 最近の mnews は起動がとても遅くなったのですが、
> これを回避する方法はあるのでしょうか?
> # IPv6 関連の影響かな?

#IPv6 まわりでは libc6 のバージョンも重要かも。

そういわれてみるとそういう気もします。
#DNS の AAAA と A を両方見にいきますし。

1. どのあたりが遅いでしょう?

2. 2度目の起動はどうでしょう? (私の所では早くなる)

3. IPアドレスを指定するとどうでしょう?
    % mnews -D xx.xx.xxx.xx -M xx.xx.xx.xx -P xx.xx.xx.xx
   これで早くなるなら -4, -6 とかいう起動オプションを用意することで
   回避できるかもしれませんが、たぶん、私はやりません。
   #美しくない。

4. 以下のコードも遅いでしょうか? (1度, 2度, ...)
   % ./a.out nntp.some.where
   % ./a.out xx.xx.xx.xx

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

struct AList{
  int type;
  char *name;
};
struct AList sock_alist[] = {
  { 0,			"Unspecified"	},
  { SOCK_STREAM,	"SOCK_STREAM"	},
  { SOCK_DGRAM,		"SOCK_DGRAM"	},
  { SOCK_RAW,		"SOCK_RAW"	},
  { -1,			NULL		}
};
struct AList protocol_alist[] = {
  { PF_UNSPEC, "PF_UNSPEC" },
  { PF_LOCAL, "PF_LOCAL" },
  { PF_INET, "PF_INET" },
  { PF_INET6, "PF_INET6" },
};

char *find_index(struct AList *list, int i){
  struct AList *p;
  for (p=list; p->name; p++)
    if (p->type == i) return (p->name);
  return(NULL);
}
int main(int argc, char *argv[]){
	char *name = "localhost";
	char *service = NULL;
	struct addrinfo hints;
	struct addrinfo *res;
	int j;
	int status;
	
	if (argc>1) name = argv[1];
	if (argc>2) service = argv[2];

	printf ("getaddrinfo(\"%s\",\"%s\",&hints,&res)\n",
		name, service);
	for(j=0; sock_alist[j].name; j++){
		res = NULL;
		memset(&hints,0,sizeof(hints));
		hints.ai_flags = AI_CANONNAME;
		hints.ai_family = PF_UNSPEC;
		hints.ai_socktype = sock_alist[j].type;
		status = getaddrinfo(name,service,&hints,&res);
		printf ("\tsocktype=%d(%s): [%d]%s\n",
			sock_alist[j].type,
			sock_alist[j].name,
			status,
			(status ? gai_strerror(status) : "ok")
		);
		if(!status && res){
		  struct addrinfo *p;
		  char hostbuf[1024], portbuf[1024];
		  for (p = res; p; p = p->ai_next) {
		    getnameinfo(p->ai_addr, p->ai_addrlen,
				hostbuf, sizeof(hostbuf), 
				portbuf, sizeof(portbuf),
				NI_NUMERICHOST|NI_NUMERICSERV);
		    printf ("\t\tfamily=%d(%s) addr=%s port=%s canonname=%s\n",
			    p->ai_family, find_index(protocol_alist, p->ai_family),
			    hostbuf, portbuf, p->ai_canonname);
		  }
		  freeaddrinfo(res);
		}
	}
}

-- 
吉藤英明 (YOSHIFUJI,Hideaki)    <yoshfuji@xxxxxxxxxxxxxxxxx>
Web Page: http://www.ecei.tohoku.ac.jp/%7Eyoshfuji/
PGP5i FP: F731 6599 5EB2 BBA7 1515  1323 1806 A96F 5700 6B25