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

[plamo:25411] Re: TCP のportが解放されるとき



早間です。

> 大崎です。
> 
> http://www.csg.is.titech.ac.jp/~chiba/lecture/web/web01.html
> 
> に詳しい説明がありました。
> 
> 
> > あるいはサーバ側で bind() する前にあらかじめ
> > 
> > int value = 1;
> > setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
> > 
> > を実行しておいてもよい。
> 
> を実行してみたはどうでしょう?
> 

皆さんからたくさん助言を頂きありがとうございます。
早速
  int value = 1;
  setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &value,sizeof(value));
を実行したところ、終了後、すぐに起動しても bind がエラーを出さなく
なりました。CTL-C で終了させても大丈夫です。
# Linux の man からは SO_REUSEADDR に行きつけませんでした。
# setsockopt をサーチしたら microsoft の Web が出て来ました。
# microsoft の web には使用方法が例示されています。

疑問が生じたのは
perl では
socket(SOCKET,PF_INET,SOCK_STREAM,$proto);
bind (SOCKET,$addr);
listen(SOCKET,SOMAXCONN);
accept(CLIENT,SOCKET);

の状態で kill -HUP の実行で
 close(SOCKET)
実行後同じプログラムを、同じ引数で再起動して終了していますが問題
無く起動出来ています。

条件が違うのは
(1) 起動が root 権限
(2) port 番号 が  1024 以下
なので、root と 1024 以下は特別扱いかとも思っていました。

また、SO_REUSEADDR (ソケットオプション)は
  /usr/src/linux/include/asm-i386/socket.h 
で定義されているので、kernel 依存性のある情報だと思うのですが、
移植性に問題は無いのでしょうか。と言うより
perl でもこの設定をしている筈と思うのですが、perl の Socket::
に kernel 依存性が生じてしまうようにもおもいます。
或いは、include の値は kernel が決めていても
 「すべて同じ値になっている kernel  依存性は事実上無い」
と言うことなのでしょうか。

この設定は kernelから取り上げるべきなのでしょう

-- 早間 義博
    メイリングリストから送られてくるメイル以外届きません。

Follow-Ups
[plamo:25412] Re: TCP のportが解放されるとき, Kaihei^Rastaman^Koyama

[検索ページ] [メール一覧]
Plamo ML 公開システム