TCP/IP

32. PING をプログラムでモニターするには

普段は PING というと、DOS コマンドとして DOS 上で使用されることが多いが
System i 上でも PING コマンド が IBM によって提供されており、
System i に用意されている PING コマンドを使えば、次のように
外部の TCP/IP サーバーが現在、起動されているかどうかを検査することができる。

PING をプログラムでモニターするには

これとは別にプログラムの中から PING でTCP/IP サーバーが起動されているかどうかを
検査したい場合がある。
TCP/IP サーバーが起動されていれば、ファイルをプログラムによって転送したい、等の
要求がある場合である。
ここでは PING コマンドをモニターして PING が成功裡に終わったのかどうかを
判定するための手法を紹介する。

【コマンド: CHKPING】
0001.00              CMD        PROMPT('CHECK PING')                        
0002.00              PARM       KWD(URL) TYPE(*CHAR) LEN(128) PROMPT(URL)   
【コンパイル】
CRTCMD CMD(MYLIB/CHKPING) PGM(MYLIB/CHKPINGCL) SRCFILE(MYSRCLIB/QCMDSRC) AUT(*ALL)
【CLP: CHKPINGCL】
0001.00              PGM        PARM(&URL)
0002.00 /*---------------------------------------------------------*/
0003.00 /*  CHKPING :  CHECK PING                                  */
0004.00 /*---------------------------------------------------------*/
0005.00              DCL        VAR(&URL) TYPE(*CHAR) LEN(128)
0006.00              DCL        VAR(&STATUS) TYPE(*CHAR) LEN(4) VALUE(UP)
0007.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)
0008.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
0009.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)
0010.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
0011.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
0012.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0013.00
0014.00              PING       RMTSYS(&URL) MSGMODE(*QUIET *ESCAPE)
0015.00              MONMSG     MSGID(TCP3210) EXEC(DO)
0016.00              CHGVAR     VAR(&STATUS) VALUE(DOWN)
0017.00              ENDDO
0018.00              CHGVAR     VAR(&MSG) VALUE(&URL *TCAT ' = ' *CAT &STATUS)
0019.00              GOTO       SNDMSG
0020.00              RETURN
0021.00
0022.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG)
0023.00  SNDMSG:
0024.00              SNDPGMMSG  MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG)
0025.00              ENDPGM
【コンパイル】
CRTCLPGM PGM(MYLIB/CHKPINGCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
【解説】

PING コマンドは

0014.00              PING       RMTSYS(&URL) MSGMODE(*QUIET *ESCAPE) 

のようにして リモート・システム (RMTSYS) によって PING の検査をしているが
IP アドレスを検査したい場合は リモート IP アドレス (INTNETADR) を指定するようにすればよい。

0015.00              MONMSG     MSGID(TCP3210) EXEC(DO)

によって TCP3210 メッセージ ID をモニターすることによって PING が成功であったか、
それとも失敗であったかを判断することができる。

このPING による検査手法は、また、System i がインターネットに接続可能であるかを
判断することもできる。
通常では、ほぼインターネットで接続できるはずのサイト: WWW.YAHOO.CO.JP に PING でテストして
もし、エラーとなるのであれば その System i がインターネットに繋がらない状態であると
判断することができる。
つまり PING コマンドは PING 先のサーバーの起動状態を検査するだけでなく、自分自身の
状態を検査することに利用することができるのである。