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

[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) <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

References
[postfix-jp: 2154] Re: sleep中にコネクションが切断されたことを検出したい, SATOH Kiyoshi
[postfix-jp: 2155] Re: sleep中にコネクションが切断されたことを検出したい, Yoshisato YANAGISAWA

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