[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[postfix-jp: 2150] Re: sleep中にコネクションが切断されたことを検出したい
- Subject: [postfix-jp: 2150] Re: sleep中にコネクションが切断されたことを検出したい
- From: Yoshisato YANAGISAWA <yanagisawa@xxxxxxxxxxxxxxxxxxx>
- Date: Tue, 11 Jul 2006 15:19:12 +0900
柳澤です。
On Tue, 11 Jul 2006 14:21:21 +0900
SATOH Kiyoshi <satoh0@xxxxxxxxx> wrote:
> それで質問なのですが、vstream_feof や vstream_ferror では、接続が切
> れたことを確認することは出来ないのでしょうか。
src/util/vstream.cより
/* vstream_feof() returns non-zero when a previous operation on the
/* specified stream caused an end-of-file condition.
/*
/* vstream_ferror() returns non-zero when a previous operation on \
the
/* specified stream caused a non-EOF error condition, including \
timeout.
これは2.2.10のものなので最近のは違うかも知れませんが、
この説明によるとvstream_feofやvstream_ferrorは直前に実施した操作でEOFや
エラーが置きているかをしらべる関数のようですね。
そして、さらに調べてみるとやはりI/Oなしにこれらの関数を呼んでもEOFや
エラーとは判定してくれないようです。
これらの関数はsrc/util/vstream.hにマクロとして定義されていて、
このマクロはsrc/util/vbuf.hで定義されているマクロを利用しています。
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文からやりなおし。
> socketでの通信を考えると、送信側がshutdownしてくれないと切断を検知す
> ることが出来ないような気もします。
> (切断テストをしたプロセスのkillではなく)selectでタイムアウト時間を設
> 定している場合には、shutdownがされると考えて良いのでしょうか。
何故selectが出てきたか良くわかりませんが、
close(2)やshutdown(2)してくれた場合には検出できると思います。
しかし、vstream_feofやvstream_ferrorだけではなくvstream_freadや
VSTREAM_GETCなんかも呼ばないとEOFやエラーというフラグは立たないと
思います。
--
-------------------------------------------------------
Yoshisato YANAGISAWA <yanagisawa@xxxxxxxxxxxxxxxxxxx>
Dept. of Mathematical and Computing Sciences,
Graduate School of Information Science and Engineering,
Tokyo Institute of Technology.
_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
- Follow-Ups
-
- [postfix-jp: 2151] Re: sleep中にコネクションが切断されたことを検出したい, SATOH Kiyoshi
- References
-
- [postfix-jp: 2149] sleep中にコネクションが切断されたことを検出したい, SATOH Kiyoshi
[検索ページ]
[Postfix-JP ML Home]