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

[freewnn:00398] Re: jserver の接続数上限



鳩貝@甲南大学です.

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)));

-----------------------------------------------------------------