Telnetでどこかに接続したまま放っておくと、いつの間にかセッションがきれていて悲しい思いをしますね。
特にいくつもTelnetクライアントを立ち上げて作業していると、余り使っていないセッションが勝手に閉じていたり…
無通信状態が一定時間続くとルータがセッションを切っているというケースが多いと思われます。
(自宅のルータがそういう仕様。LinuxのIPマスカレードもそんな感じだった。たぶん設定でなんとかなるんだろうけどどうやるんだろう)
そこでバックグラウンドで実行しておくと、一定時間(30sec)毎にダミーの文字表示を行ってセッションが切れなくするツール?を作りました。(Unix,Linuxとか用)
■ ソース (kirema1000.c)
#include <stdio.h>
#include <unistd.h>
#define KIREMA 1000
int main() {
int i;
printf("sustainable session tool KIREMA1000 (by FSLASHT)\n");
while (1) {
sleep(30); // Wait 30 sec
for ( int i=0; i<KIREMA; i++ ) putchar(0);
}
return 0;
}
■ コンパイル方法
gcc -o kirema1000 kirema1000.c
コンパイルすると kirema1000 という実行バイナリができますので、ログイン先のマシンの実行パスに置いて下さい。
■ 実行方法
Telnetでログインしたときに次のようにして実行します。
kirema1000 &
ログインスクリプトに書いて置いてもよいとおもいます。
■ 停止方法
ログアウトしても動き続けますので、たまに次のようにして kill してください。
killall kirema1000
■ 補足
ソース見たまんまですが、30秒毎に文字コード0x00を1000バイト出力しています。
1バイトではなく1000バイトも出力しているのは、(なにかの)バッファサイズ以上出力しないと送信されないことがあったためです。
うまく動かないときは定数 KIREMA の値を増やして下さい。
それよりもだれか、LinuxでIPマスカレードするときの無通信状態のタイムアウトの設定方法を教えて下さい(^^;
開いた括弧は必ず閉じる -- あるプログラマー
ログアウトしたら自動で終了 (スコア:1)
(snip)
int nStat=0;
while (nStat != EOF) {
sleep(10); // Wait 30 sec
for ( i=0; i<KIREMA; i++ ) nStat = putchar(0);
}
(snip)
ログアウトされたら putcharの戻り値がEOFとかになるのを勝手に期待してみたけどちがかった