[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00398] Re: jserver の接続数上限
- To: freewnn@tomo.tomo.gr.jp
- Subject: [freewnn:00398] Re: jserver の接続数上限
- From: Koichi Hatogai (Konan University) <hato@XXXX>
- Date: Fri, 16 Jun 2000 16:33:18 +0900
- Cc: hatogai@XXXX
- In-Reply-To: Your message of "Fri, 16 Jun 2000 12:10:32 JST"
- References: <200006160310.MAA16750@ikoma.cc.osaka-kyoiku.ac.jp>
- Reply-To: freewnn@tomo.gr.jp
鳩貝@甲南大学です.
Date: Fri, 16 Jun 2000 12:10:32 +0900 (JST)
Message-Id: <200006160310.MAA16750@ikoma.cc.osaka-kyoiku.ac.jp>,
You (aono@cc.osaka-kyoiku.ac.jp (Tomoki AONO)) said:
> 大阪教育大の青野と申します。こんにちは。
どうも,こんにちは.
よろしくお願いします.
>>> これは,ファイルディスクリプタ数の獲得に関してBSD42と同じ動作をSOLARISで
>>> 実行し,動的にファイルディスクリプタ数を決定するための修正です.
> Solaris 2.4を使っているのですが、getdtablesize()関数があり
> ません。(正確にはBSD互換ライブラリ(-lucb)にはありますが、
> 標準のlibcにはありません。)ですので、マージする暁には
> configureにgetdtablesize関数があるかのチェックを加えてもらっ
> て、「#ifdef HAVE_GETDTABLESIZE 〜 #else 〜 #endif」でくくっ
> てもらえないでしょうか。
そうでした.確か昔はgetdtablesize()はlibucb.soにあったような気が
していたんです.最近のSolarisでは両方にありますね.
> manやWebページによると、getrlimit()やsysconf()関数が使える
> らしいのですが…。時間があれば代案を書いてみます。
ということで,いつもながら安易な方向に流れてしまいました.
詳しくは,以下の de.c のdiffを眺めていただきたいのですが,
SOLARISでは,getrlimit()を使用するということではいかがで
しょうか? 今回の版ではwnn_os.hの修正はありません.
> #あるいは動的にとらずに、OPEN_MAX(in limits.h)で代用して
> #もらうとか…。
残念ながら,OPEN_MAXの64では足らないので今回の修正を提案して
いるんです.悪しからず.
まだ,実行テストにはかかっておりません.たびたびながら悪し
からず.
---
_/ _/ _/_/ _/_/_/ _/_/_/ / 甲南大学 情報教育研究センター
_/ _/ _/ _/ _/ _/ _/ / 鳩貝 耕一 (hatogai@konan-u.ac.jp)
_/_/_/_/ _/_/_/_/ _/ _/ _/ / Private: hatogai@kcc.zaq.ne.jp
_/ _/ _/ _/ _/ _/_/_/ / @nifty: GBB02256, 電話: 078-435-2329
-----------------------------------------------------------------
*** de.c.orig Thu Jun 15 23:59:31 2000
--- de.c Fri Jun 16 16:12:05 2000
***************
*** 79,88 ****
#include "msg.h"
- #ifdef BSD42
- #define NOFILE getdtablesize()
- #endif
-
#ifdef HITACHI
#undef NOFILE
#define NOFILE 89
--- 79,84 ----
***************
*** 89,94 ****
--- 85,92 ----
#endif /* HITACHI */
#ifdef SOLARIS
+ #include <sys/time.h>
+ #include <sys/resource.h>
#ifdef SO_DONTLINGER
#undef SO_DONTLINGER
#endif
***************
*** 326,333 ****
--- 324,343 ----
socket_disc_init()
{
int sel_w; /* long word(==int) width of all_socks */
+ #ifdef SOLARIS
+ struct rlimit rl;
+ #endif
+ #ifdef SOLARIS
+ (void) getrlimit(RLIMIT_NOFILE, &rl);
+ nofile = (int) rl.rlim_cur;
+ #else /* SOLARIS */
+ #ifdef BSD42
+ nofile = getdtablesize();
+ #else /* BSD42 */
nofile = NOFILE;
+ #endif /* BSD42 */
+ #endif /* SOLARIS */
sel_w = (nofile-1)/BINTSIZE + 1;
all_socks = (int *)calloc( sel_w,(sizeof(int)));
ready_socks = (int *)malloc( sel_w*(sizeof(int)));
-----------------------------------------------------------------