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

[postfix-jp: 2151] Re: sleep中にコネクションが切断されたことを検出したい



さとうです。

On Tue, 11 Jul 2006 15:19:12 +0900
Yoshisato YANAGISAWA <yanagisawa@xxxxxxxxxxxxxxxxxxx> wrote:
Subject: [postfix-jp: 2150] Re: sleep中にコネクションが切断されたことを検出したい

> この説明によるとvstream_feofやvstream_ferrorは直前に実施した操作でEOFや
> エラーが置きているかをしらべる関数のようですね。

 んー、確かにそう書かれてますね。
 もうちょっと見たらわかることなのに、良く確認せずに書いてすみません。

> vstream_feofを呼んだ場合もvstream_ferrorを呼んだ場合もvbufにあるフラグの
> チェックしかしていないため、これらを呼び続けても同じ結果しか返さない

 確認しました。確かに、読んでるだけでフラグが変更されないので、同じ結果
だけしか返りませんね。

> 実装はしていませんが、アイディアとして一言言うなれば、
> こういう実装はどうでしょう?
> 
> 1. わざとここでVSTREAM_GETC(以下略してgetc)を呼出す
> 2. if (greet pauseのタイムアウト時間を経過)
>        タイムアウトして続きの処理を行う
>    else /* Greet Pauseで指定した時間より前に何かの処理が行われた */
>        case getcで何かのデータが取れた場合:
>            Improper Pipeliningということで504終了。
>        case getcでデータが取れなかった場合:
>            if (vstream_feofあるいはvstream_ferrorがtrue)
>                 相手が接続を閉じたと判断して接続を終了
>            else
>                 getcがなんらかの理由でタイムアウトしたと判断して
>                 経過時間分を減じて2の最初のif文からやりなおし。

 確かにこれならいけそうかも。
 というか自分もこれに近いことは考えて、でも、なにかデータ取れちゃったと
きにどうしよう、と思ってやめたんですが、こっちが返して無いうちになんか送っ
てきてたら504で終了、とすることで、あまり大きな修正にせずにすみますね。

> 何故selectが出てきたか良くわかりませんが、
> close(2)やshutdown(2)してくれた場合には検出できると思います。
> しかし、vstream_feofやvstream_ferrorだけではなくvstream_freadや
> VSTREAM_GETCなんかも呼ばないとEOFやエラーというフラグは立たないと
> 思います。

 良く覚えてないんですが、selectってタイムアウト時間の設定って出来ません
でしたっけ?それで自動的に切れたときには、shutdownしたのと同じにしてくれ
るのかなと思いまして。
 なんにしても、読むか書くかしないと、フラグの更新がされないわけですね。

 大変参考になりました。ちょっと試してみます。


-- 
佐藤 潔 (SATOH Kiyoshi) <satoh@xxxxxxxxx> http://d.hatena.ne.jp/stealthinu/

_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list

Follow-Ups
[postfix-jp: 2152] Re: sleep中にコネクションが切断されたことを検出したい, Takahiro Kambe
[postfix-jp: 2153] Re: sleep中にコネクションが切断されたことを検出したい, IWAMOTO Kouichi
References
[postfix-jp: 2149] sleep中にコネクションが切断されたことを検出したい, SATOH Kiyoshi
[postfix-jp: 2150] Re: sleep中にコネクションが切断されたことを検出したい, Yoshisato YANAGISAWA

[検索ページ] [Postfix-JP ML Home]