NEWS

IBM i のソケット通信でタイムアウト値を設定したい

ホーム フォーラム お困りごとの助け合い IBM i のソケット通信でタイムアウト値を設定したい

1件の返信スレッドを表示中
  • 投稿者
    投稿
    • #9420
      gomAnomalocaris
      参加者

      最近頂いたQAです。
      Q.
      IBM i でクライアントとソケット通信でテータ送受信する仕組みを構築したお客様で、クライアント側の操作がおかしい場合や誤操作した際などにIBM i 側とのソケットコネクションを設定したインターバル時間経過後にIBM i 側から遮断(リセット)したい

      以下のようなロジックを記述しているがタイムアウト値が動作しない

      ・ILE RPGでSOCKET()でソケットを作成
      ・LISTEN()で待ち受け → ACCEPT()でクライアントから接続
      ・通常は、RECV()でクライアントからのデータを受信
      ・この時、クライアント側の誤操作その他が発生した際に、あらかじめ決めた秒数経過後に、RECV()処理をタイムアウトにしたい。

      ご相談いただいた時点では、タイムアウトが設定できずクライアントからの異常なリクエストの通信がスタックして滞留するケースが発生していました。

    • #9421
      gomAnomalocaris
      参加者

      (自己回答です)
      A.
      SETSOCKOPTはあきらめて、別なプログラミングにトライしたところ期待通りの動作が実現できたとのことでした。大まかには下記になります。

      **①SOCKET()でソケットを作成**
      **②LISTEN()でクライアント要求を待機**
      **③ACCEPT()でクライアントの接続要求を許可**
      **④SELECT()でタイムアウトの秒数を設定**
      **⑤ソケットが読み取り可能か確認**
      **⑥ソケットが読み取り可能な場合以下実行**
      **⑦ソケットから読み取りできず指定秒数でタイムアウトした場合、接続をクローズして①に戻る。**
      **⑧RECV()でクライアントからのデータを読取り**
      **⑨SEND()でクライアントへデータ送信**
      **⑩接続を閉じて初期化し②に戻る**

1件の返信スレッドを表示中
  • このトピックに返信するにはログインが必要です。
PAGE TOP