67953


HTTPS POST送信した際、ごく稀に応答がなく、そのまま処理がフリーズしてしまいます。  
タイムアウト等フリーズを回避する方法はありますでしょうか？  
＜開発環境等＞  
・spresense本体＋spresense lte拡張ボード  
・Arduino IDE

下記コードの `client.post(postPath, contentType, postData);` 個所でごく稀に応答なしになります。

[code]

    void send_notify(String message) {
    
      // LTE接続開始
      while (true) {
        if (lteAccess.begin() == LTE_SEARCHING) {
          if (lteAccess.attach(lte_apn, lte_user_name, lte_password) == LTE_READY) {
            print_wrap(1,"lte attach succeeded",0);
            break;
          }
          print_wrap(1,"lte An error occurred, shutdown and try again.",0);
          lteAccess.shutdown();
          sleep(1);
        }
      }
    
      // 送信データ準備
      String contentType = "application/x-www-form-urlencoded\nAuthorization: Bearer " + String(notify_token);
      String postData = "message=" + String(message);
    
      // HTTPS POST送信
      client.post(postPath, contentType, postData);
    
      // 応答コードを表示
      int statusCode = client.responseStatusCode();
      String response = client.responseBody();
    
      sleep(1);
    
      // LTE接続停止
      print_wrap(1,"lte disconnecting",0);
    
      client.stop();
      lteAccess.shutdown();
    
    }
    
[/code]


CC BY-SA 4.0
2020-05-21T07:00:48.460
66837
2020-06-24T08:52:02.240
2020-05-21T07:40:55.563
40166
40166
question
spresense arduino
HTTPS での POST 送信時、稀に応答なしで処理がフリーズしてしまう


別の場所でも書きましたが、フリーズを回避する方法として、Watchdogというライブラリが使えると思います。  
[SPRESENSE
Watchdogライブラリ](https://developer.sony.com/develop/spresense/docs/arduino_developer_guide_ja.html#_watchdog_%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA)

このライブラリを使うことで `send_notify()` 関数が30秒以上返らなかった場合、強制的にリセットすることができます。

[code]

    // Watchdogを初期化
    Watchdog.begin();
    // Watchdogタイマーを15000msecで開始
    Watchdog.start(30000);
    
    send_notify("hogehoge");
    
    // Watchdogタイマーを終了
    Watchdog.stop();
    // Watchdogをファイナライズ
    Watchdog.end();
    
[/code]

ご参考になれば幸いです。


CC BY-SA 4.0
2020-06-24T08:52:02.240
67953
2020-06-24T08:52:02.240
32034
66837
answer