[Armadillo:07397] Re: ソケット通信においてSO_REUSEADDRオプションが効かない

Sugitani Naoki email@hidden
2011年 7月 13日 (水) 11:37:18 JST


To: 古賀 殿
From: 杉谷@ChAS

毎々お世話になっております。

ご教示ありがとうございました。
状況を理解致しました。

本件、システム側の制限とするように致します。

以上。

> サムシングプレシャスの古賀です。
> 
> この件、Armadillo Linux というよりは、Linux の TCP/IP スタッ
> ク一般の話になると思いますが・・・
> 
> 杉谷さん([Armadillo:07395]):
> >追加の情報です。
> > 
> >iTronとwindowsでTCPヘッダのオプションに相違がありました。
> >iTronでは、TCPヘッダのオプションを使用せずに通信を行っております。
> >windowsでは、TCPヘッダオプションにTime Stampを設定して通信しております。
> >TCPヘッダオプションのTime Stamp有無によってarmadillo linuxの挙動が
> >変化することは考えられないでしょうか。
> 
> カーネルのソースツリーを眺めてみたところ、Time Stamp の有無で
> 挙動が変わるようですね。ご指摘の通り、SO_REUSEADDR が指定された
> 際に、Time Stamp を受け取れていないソケットに対しては、
> TIME_WAIT 状態での再利用が行われない実装になっているようです。
> 
> 以下のソースが、関連個所だと思います:
> 
> ・/net/ipv4/tcp_ipv4.c
>  tcp_twsk_unique()
>  tcp_v4_connect()
> 
> ・/net/ipv4/inet_hashtables.c
>  __inet_hash_connect()
>  __inet_check_established()
> 
> ・/include/net/timewait_sock.h
>  twsk_unique()
> 
> 
> tcp_twsk_unique() では、当該ソケットの直近の Time Stamp が記録
> されていない場合は、0 を返すようですが、その結果、
> __inet_check_established() 内の not_unique: ラベル部が実行されて
> -EADDRNOTAVAIL が戻り値として返され、tcp_v4_connect() における
> inet_hash_connect() の呼び出しがエラーとなって失敗する、という
> 状況ではないかと思います。
> 
> --
> 古賀信哉 (株)サムシングプレシャス
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo






armadillo メーリングリストの案内