[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00400] Re: jserver の接続数上限
- To: freewnn@tomo.tomo.gr.jp
- Subject: [freewnn:00400] Re: jserver の接続数上限
- From: aono@XXXX (Tomoki AONO)
- Date: Fri, 16 Jun 2000 18:33:28 +0900 (JST)
- In-Reply-To: Your message of "Fri, 16 Jun 2000 17:03:29 +0900 (JST)".<20000616.170329.46113892.ukawa@nara.sbc.sharp.co.jp>
- Reply-To: freewnn@tomo.gr.jp
大阪教育大の青野です。鳩貝さん、鵜川さん、ありがとうございます。
<20000616.170329.46113892.ukawa@nara.sbc.sharp.co.jp>の記事において
ukawa@sbc.nara.sharp.co.jpさんは書きました。
>> 自分で作業していないのになんですが、、
>> HAVE_RLIMITなり、HAVE_GETDTABLESIZEなりで処理を分ける方が良いかなと思います。
>> どうでしょ?
私も少しいじっていたのですが、以下のような感じでいかがでしょ
うか。ちょっと最後にmax_clientと比較するデバッグメッセージ
を追加してます(内容はいい加減です)。Solaris 2.4で
(jserverのみですが)コンパイルできることは確認しました。
#ほかにconfigure.inやconfig.h.inにエントリを足す必要があ
#ります。
wnn-users MLの議論も見ていたのですが、可能ならsetrlimit()
でmax_clientに合わせて最大fdを増やす(不可能な場合は警告を
出す)ようにした方が分かりやすいのかもしれません。
--- ../orig/Wnn/jserver/de.c Tue Mar 21 01:31:43 2000
+++ Wnn/jserver/de.c Fri Jun 16 17:46:47 2000
@@ -70,9 +70,8 @@
#include "msg.h"
-#ifdef BSD42
-#undef NOFILE
-#define NOFILE getdtablesize()
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
#endif
#ifdef HITACHI
@@ -339,7 +338,30 @@
{
int sel_w; /* long word(==int) width of all_socks */
+ /* 各種手段を使って同時オープンできるファイル数を調べる */
+#if defined(HAVE_GETDTABLESIZE)
+ nofile = getdtablesize();
+#elif defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)
+ {
+ struct rlimit rlim;
+ if(!getrlimit(RLIMIT_NOFILE, &rlim)) {
+ nofile = rlim.rlim_cur;
+ } else {
+ nofile = NOFILE;
+ }
+ }
+#else
+ /* これまでの条件に合致する場合、HITACHI で不具合が起きるかもしれない */
nofile = NOFILE;
+#endif /* defined(HAVE_SYSCONF) && defined(_SO_OPEN_MAX) */
+ /* for DEBUG : max_client との比較もしてみる */
+ fprintf(stderr, "This system can use %d file descriptors.\n", nofile);
+ if(max_client > nofile) {
+ fprintf(stderr,
+ "Warning: I cannot serve max_client(%d) requests, sorry...\n",
+ max_client);
+ }
+
sel_w = (nofile - 1) / BINTSIZE + 1;
all_socks = (int *) calloc (sel_w, (sizeof (int)));
ready_socks = (int *) malloc (sel_w * (sizeof (int)));
getdtablesizeが使われているところはほかにuum/jhlp.cもある
のですが、ここもなおせばNOFILEに関する機種依存部分がすっき
りしそうです。
----
大阪教育大学 情報処理センター
青野智樹 (aono@cc.osaka-kyoiku.ac.jp)
#情報処理センターに関するお問い合わせは
#center@cc.osaka-kyoiku.ac.jp へお願いします。