From: Takahiro Kambe Date: 2003-08-19T02:41:16+09:00 Subject: [ruby-list:38140] Re: ポートが閉じているときの例外など In message <20030819.014435.10658276.taca@back-street.net> on Tue, 19 Aug 2003 01:44:54 +0900, Takahiro Kambe wrote: > > EINPROGRESSのような時間がかかっているときに、システムコール一回 > > の間くらいではそうそう条件は変わらないのではないかという気がす > > るのですが。 > 手元のテストでは、 余計かもしれませんが、さらに時系列的に追うと、 > 1. connect()失敗 (EINPROGRESS) > 2. getsockopt()で ECONNREFUSED を検知 ユーザプロセス カーネル 1. connect()実行 TCP SYNを送る指示をしてEINPROGRESSで返る。 2. リモートからTCP RSTが返るけれど、 connect()は既に終わってる。 3. getsockopt()を実行 4 ECONNREFUSEDな状態がわかっているので、 これを値として返す。 といった感じになります。時間がかかっているといっても、TCP RSTが返るま でconnect()で待ってるわけではないというだけのことなわけです。 -- 神戸 隆博 / Takahiro Kambe