2006年7月12日

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

さとうです。

 昨日ご相談させていただいていた、sleep中にコネクションの切断を検知して、
切れたと同時にsmtpdも落としたい、という件ですが、とりあえずこんな感じで
作ってみました。

 read_wait という、タイムアウトを指定して読み込みを待つ関数が用意されて
いるため、それを使ってなにか入力があった場合にデータを取得してきて、コネ

クションが切れたかどうかを判断するようにしてみました。
 先に入力されてきたものの場合、pipeliningでそのまま落としても良いかと思っ
たのですが、そうするとpipeliningの汎用性が無くなってしまうので、その場合
は素直に残りの時間sleepすることにしました。

 タイムアウトの指定をsleep_timeにすればループさせなくても良いのですが、
何秒後に切断されたかというログを残したいという要望もあるため、あえてルー
プさせています。

 これで問題無さそうだったら、自分のサーバで様子見てみたいと思っています。

/* sleep(atoi(*++cpp)); */
int sleep_time = atoi(*++cpp);
int i;
for ( i = 0; i < sleep_time; i++ ) {
/* sleep( 1 ); */
if ( ! read_wait(state->client->fd, 1) ) { /* read enabled */
int ch = VSTREAM_GETC(state->client);
if (vstream_feof(state->client) || vstream_ferror(state->client)) { /* lost connection */
msg_warn("lost connection during sleep %d", i);
break;
}
else { /* pipelining */
vstream_ungetc(state->client, ch);
msg_warn("pipelining during sleep %d", i);
sleep( sleep_time - i );
break;
}
}
}


#これでログ取れると、スパマーのタイムアウト設定のデータが取れるので、最
#適な遅延時間を決めるための資料が作れると期待しています。


--
佐藤 潔 (SATOH Kiyoshi) http://d.hatena.ne.jp/stealthinu/

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

投稿者 xml-rpc : 2006年7月12日 18:24
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/39447
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。